QAQ
枚举任意两个点计算斜率,对于一个点与其他点的斜率进行排序,看有多少个相同斜率的即为答案
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
double f[701][701];
double x[701],y[701];
int ans;
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%lf%lf",x+i,y+i);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j)
f[i][j]=(y[i]-y[j])/(x[i]-x[j]);
for(int i=1;i<=n;i++)
{
sort(f[i]+1,f[i]+n+1);
int sum1=0;
int sum2=0;
for(int j=3;j<=n;j++)
if(f[i][j]==f[i][j-1])
sum1++,sum2=max(sum2,sum1);
else sum1=0;
sum1=max(sum1,sum2);
ans=max(ans,sum1);
}
printf("%d",ans+2);
}