//应该想到去枚举比较斜率k和截距b
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 200000;
int n = 0;
struct line{
double k , b;
bool operator < (const line& t) const
{
if(k!= t.k) return k< t.k;
return b < t.b;
}
}l[N];
int main()
{
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 = (double)(y2-y1)/(x2-x1);
double b = y1 - k*x1;
l[n++]= {k,b};
}
}
sort(l , l +n);
int res= 0;
for(int i = 0 ; i < n; i ++)
{
if(fabs(l[i].k - l[i-1].k ) > 1e-8 || fabs(l[i].b - l[i-1].b) > 1e-8)
res++;
}
//注意这里是依次枚举某一个数, 不会出现例如有3个k=1, b= 1;而不被统计的情况
cout << res+20 << endl;
//最后不要忘了加上斜率不存在的直线的个数
}
结果:40257