题意:给出n个点的整数坐标(n<=700),求一条直线,使得在这条直线上的点数最多,输出点数
思路:对每个点i,求其余每个点j到他的斜率,记录下并排序,再统计有多少斜率一样的。求出最大值。(也许解释的不很清楚,不明白的可一留言)
错误:
1. 要判断在同一条竖线上的情况
2. 忘了自己到自己的斜率不能算上
统计:192k, 313ms, 4Y
int x[701], y[701], n;
double a[701];
int main()
{
while ( scanf("%d", &n) && n !=0 )
{
F(i,1,n)
scanf("%d%d", &x[i], &y[i]);
int Max = 0;
F(i,1,n)
{
int t = 0;
F(j,1,n)
{
if (i == j)
continue;
if ( x[i] == x[j] )
a[++t] = 9999999;
else
a[++t] = ((double)y[j] - y[i] )/(x[j] - x[i]) ;
}
sort(&a[1], &a[t+1]);
int now=1;
F(j,2, n)
{
if (a[j] == a[j-1] )
now++;
else
{
Max = Max > now ? Max : now ;
now = 1;
}
}
}
printf("%d/n", Max+1);
}
return 0;
}