#include <bits/stdc++.h>
#define int long long
using namespace std;
const int xmmm=7000+10;
struct p{
int x, y, d;
bool operator < (const p &o) const{
return (x<o.x)||(x==o.x&&y<o.y)||(x==o.x&&y==o.y&&d<o.d);
}
}k[xmmm];
map<p , int>mp;
int gcd_(int a, int b){
if(a==0||b==0)return 0;
while(a%b){
int t;
t=a%b;a=b;b=t;
}
return b;
}
void mark(int i, int j){
int m1=k[i].x-k[j].x;
int m2=k[i].y-k[j].y;
int t1, t2;
t1=m1<0?0-m1:m1;
t2=m2<0?0-m2:m2;
int t=gcd_(t1, t2);
if(t)t1/=t, t2/=t;
if((m1<0&&m2<0)||(m1>0&&m2>0))mp[p{t1, t2, i}]++;
else if((m1==0&&m2<0)||(m1<0&&m2==0))mp[p{t1, t2, i}]++;
else mp[p{0-t1, t2, i}]++;
}
signed main()
{
mp.clear();
int ans=0;
int n;cin>>n;
for(int i=1;i<=n;i++){
cin>>k[i].x>>k[i].y;
k[i].d=i;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j)continue;
mark(i, j);
}
}
for(auto [x, y]:mp){
ans=max(ans,y+1);
}
cout<<ans<<'\n';
return 0;
}
该代码可ac, 输入 5 5 1 4 1 3 1 2 1 1 1 预期输出 5 实际输出 2
不应该过的