http://acm.pku.edu.cn/JudgeOnline/problem?id=1118
Код:
#include <stdio.h>
#include <math.h>
bool f[705][705];
int a[705];
int main(){
int n, i, j, s, num, maxn;
int x[705], y[705];
int t, m;
while(scanf("%d", &n) != EOF && n){
for(i = 0;i <= n - 1;i++) scanf("%d%d", &x[i], &y[i]);
maxn = -1;
for(i = 0;i <= n - 1;i++)
for(j = i;j <= n - 1;j++)
f[i][j] = false;
for(i = 0;i <= n - 1;i++){
for(j = i + 1;j <= n - 1;j++){
if(f[i][j] == true) continue;
if(n - j < maxn) break;
num = 2;
t = 2;
a[0] = i;
a[1] = j;
f[i][j] = true;
for(s = j + 1;s <= n - 1;s++){
if(f[i][s] == true || f[j][s] == true) continue;
if((y[i] - y[s]) * (x[j] - x[s]) == (x[i] - x[s]) * (y[j] - y[s])){
num++;
a[t] = s;
for(m = 0;m <= t - 1;m++) f[m][s] = true;
t++;}
}
if(num > maxn) maxn = num;}
}
printf("%d\n", maxn);}
return 0;
}