决定直线的是斜率和截距,我们算出来有多少组不同的斜率和截距对就好了,这里注意和坐标轴平行的直线要先加到答案里边:
#include <iostream>
#include <map>
using namespace std;
typedef long long ll;
map<pair<double,double>,int> mp;
struct Point{
double x,y;
}p[25*25];
int main()
{
// 请在此输入您的代码
int cnt=0;
for(int i=0;i<20;++i)
{
for(int j=0;j<21;++j)
{
p[cnt].x=i;
p[cnt].y=j;
++cnt;
}
}
int ans=20+21;//平行于坐标轴的线
for(int i=0;i<cnt;++i)
{
for(int j=0;j<cnt;++j)
{
if(p[i].x==p[j].x || p[i].y==p[j].y)
continue;
double k=(p[i].y-p[j].y)/(p[j].x-p[i].x);
double b=(p[j].x*p[i].y-p[i].x*p[j].y)/(p[i].x-p[j].x);
if(mp[{k,b}]==0)
{
mp[{k,b}]=1;
ans++;
}
}
}
cout<<ans<<endl;
return 0;
}