大意:判断最多有多少点在同一直线上。

思路:可以通过枚举所有点加判断三点共线去解决,即(y2-x1) /(x2-x1) = (y3-y1)/(x3-x1);

注意输入格式比较特别。

CODE:

 

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <map>
using namespace std;

#define MAXN 10001

int x[MAXN], y[MAXN];
int tot;

void init()
{
    tot = 0;
    memset(x, 0sizeof(x));
    memset(y, 0sizeof(y));
}

void solve()
{
    int Max = 1, kMax;
    for(int i = 0; i < tot; i++)
    {
        for(int j = i+1; j < tot; j++)
        {
            int k1 = x[j]-x[i], k2 = y[j]-y[i];
            kMax = 2;
            for(int k = j+1; k < tot; k++)
            {
                int k3 = x[k]-x[j], k4 = y[k]-y[j];
                if(k2*k3 == k1*k4)
                {
                    kMax++;
                }
            }
            Max = max(Max, kMax);
        }
    }
    printf("%d\n", Max);
}

int main()
{
    char str[110];
    int T;
    scanf("%d%*c", &T);
    getchar();
    while(T--)
    {
        init();
        while(gets(str))
        {
            if(!str[0] && tot) break;
            sscanf(str, "%d%d", &x[tot], &y[tot]); 
            tot++;
        }
        solve();
        if(T) printf("\n");
    }
    return 0;
}

posted on 2012-10-15 15:35  有间博客  阅读(265)  评论(0编辑  收藏  举报