题意:
给出n个点的整数坐标(n<=700),求一条直线,使得在这条直线上的点数最多,输出点数。
思路:
简单几何题。采用几何中三个点是否在一条直线判定定理。
//180K 500MS
#include <cstdio>
#include <cstring>
#include <cmath>
#define N 705
using namespace std ;
struct node
{
int x , y ;
}node[N];
void Solve ( int const n )
{
int m_max ;
m_max = 2 ;
for ( int i = 1 ; i <= n ; i ++ )
{
for ( int j = i + 1; j <= n ; j ++ )
{
int temp_max ;
temp_max = 2 ;
for ( int k = j + 1 ; k <= n ; k ++ )
{
int temp1 , temp2 ;
temp1 = (node[i].x - node[j].x ) * ( node[i].y - node[k].y ) ;
temp2 = ( node[i].x - node[k].x ) * ( node[i].y - node[j].y ) ;
if ( temp1 == temp2 )
{
temp_max ++ ;
}
}
if ( m_max < temp_max )
{
m_max = temp_max ;
}
}
}
printf ("%d\n" , m_max ) ;
}
int
main ( )
{
int n ;
while ( EOF != scanf ("%d" , & n ) )
{
if ( 0 == n )
{
break ;
}
for ( int i = 1 ; i <= n ; i ++ )
{
scanf ("%d%d" , & node[i].x , & node[i].y ) ;
}
Solve ( n ) ;
}
return 0 ;
}