UVA 270 Lining Up

 

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

思路:可以通过枚举所有点加判断三点共线去解决,即(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;
}

你可能感兴趣的:(ini)