错误做法:
忽略了一点,k和b有可能是浮点数,但是设置为int了。因此结果比正确答案小很多
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int>PII;
#define x first
#define y second
const int N = 20;
const int M = 21;
PII a[420];
set<PII>s;
int main()
{
for(int i=0;i<420;i++)
{
a[i].x=i/21;//dui
a[i].y=i%21;//
}
for(int i=0;i<420;i++)
{
for(int j=0;j<420;j++)
{
if(a[i].x-a[j].x == 0) continue;
int b=a[i].y-(a[i].y-a[j].y)*a[i].x/(a[i].x-a[j].x);
int b = (a[i].y - k * a[i].x);
PII t=make_pair(k,b);
s.insert(t);
}
}
cout<<s.size()+20;
}
正确做法如下
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int>PII;
#define x first
#define y second
const int N = 20;
const int M = 21;
PII a[420];
set<vector<int>>s;
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
int main()
{
for(int i=0;i<420;i++)
{
a[i].x=i/21;//dui
a[i].y=i%21;//
}
for(int i=0;i<420;i++)
{
for(int j=0;j<420;j++)
{
if(a[i].x-a[j].x == 0) continue;
vector<int>t;
int aa=a[j].y-a[i].y;
int bb=a[i].x-a[j].x;
int cc=a[j].x*a[i].y-a[i].x*a[j].y;
int yueshu=gcd(aa,bb);
int chushu=gcd(yueshu,cc);
t.push_back(aa/chushu);
t.push_back(bb/chushu);
t.push_back(cc/chushu);
s.insert(t);
}
}
cout<<s.size()+20;
}