解题思路: 我们可由斜率确定一条唯一的直线,利用y=kx+b,计算出任意两点形成直线的k,b值
,把求出的值形成pair<>放入set去重(单独计算平行于x,y轴的直线)
答案:40257
下面附上ac代码
#include <bits/stdc++.h>
using namespace std;
set<pair<double,double> > s;
vector< pair<int,int> > v;
int main()
{
//生成所有的点
for(int i=0;i<20;i++)
{
for(int j=0;j<21;j++)
{
v.push_back(make_pair(i,j));
}
}
//计算除平行于x,y轴的直线的k,b
int n=v.size();
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(v[i].first==v[j].first || v[i].second==v[j].second)
continue;
int x1=v[i].first;
int y1=v[i].second;
int x2=v[j].first;
int y2=v[j].second;
double k=((y2-y1)*1.0)/(x2-x1);
double b=(x2*y1-x1*y2)*1.0/(x2-x1);
//set去重
s.insert(make_pair(k,b));
}
}
//再加上平行于x,y轴的直线个数
int ans=s.size()+20+21;
cout<<ans<<endl;
//system("pause");
return 0;
}