poj1118

简单题

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

#define maxn 705
#define eps 10E-9

struct Point
{
int x, y;
} point[maxn];

struct Node
{
double k;
int a, b;
} f[maxn
* maxn];

int n, ncount;
double inf;

bool operator < ( const Point & a, const Point & b)
{
return (a.x == b.x && a.y < b.y) || a.x < b.x;
}

bool operator < ( const Node & a, const Node & b)
{
if (abs(a.k - b.k) > eps)
return a.k < b.k;
return (a.a == b.a && a.b < b.b) || a.a < b.a;
}

double cal(Point & a, Point & b)
{
if (a.x == b.x)
return inf;
return (b.y - a.y) * 1.0 / (b.x - a.x);
}

int main()
{
inf
= 1.79769e+308 ;
// freopen("t.txt", "r", stdin);
while (scanf( " %d " , & n), n)
{
for ( int i = 0 ; i < n; i ++ )
scanf(
" %d%d " , & point[i].x, & point[i].y);
sort(point, point
+ n);
ncount
= 0 ;
for ( int i = 0 ; i < n; i ++ )
for ( int j = i + 1 ; j < n; j ++ )
{
f[ncount].a
= i;
f[ncount].b
= j;
f[ncount].k
= cal(point[i], point[j]);
ncount
++ ;
}
sort(f, f
+ ncount);
int len = 1 ;
int ans = 0 ;
for ( int i = 1 ; i < ncount; i ++ )
{
if (f[i].a == f[i - len].a && abs(f[i].k - f[i - len].k) < eps)
len
++ ;
else
{
ans
= max(ans, len);
len
= 1 ;
}
}
printf(
" %d\n " , ans + 1 );
}
return 0 ;
}

你可能感兴趣的:(poj)