思路: 第一点要想到y=kx+b 两条直线的k和b不相同那么这两条直线不相同 直接暴力4重循环 要把斜率不存在的直线特判出来,最后结果加上就好了
#include<iostream>
#include<algorithm>
#include <cmath>
#include <map>
using namespace std;
struct L{
double k,b;
int operator < (const L& ll) const{
if(k != ll.k) return k < ll.k;
return b<ll.b;
}
}l[1000010];
int main(){
int n = 0;
for(int x1 = 0;x1<20;x1++){
for(int y1 = 0;y1<21;y1++){
for(int x2 = 0;x2<20;x2++){
for(int y2 = 0;y2<21;y2++){
if(x1 != x2){
double k = (y1-y2)*1.0 / (x1-x2);
double b = y1-k*x1;
l[n++] = {k,b};
}
}
}
}
}
sort(l,l+n);
long long ans = 1;
for(int i = 1;i<n;i++){
if(fabs(l[i].k - l[i-1].k) > 1e-8 || fabs(l[i].b - l[i-1].b) > 1e-8) ans++;
}
cout << ans + 20 << endl;
return 0;
}
|