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;
}