1052 Rabbit Hunt.
http://poj.org/problem?id=2606
http://acm.timus.ru/problem.aspx?space=1&num=1052
Time limit:1.0 Second
Memory limit:64 MB
A good hunter kills two rabbits with one shot. Of course, it can be easily done since to any two points we can always draw a line containing the both. But killing three or more rabbits in one shot are much more difficult task. To being the best hunter in the world one should is able to kill the maximal possible number of rabbits. Assume that rabbit are a point on the plane with integer x and y coordinates. Having a set of rabbits your are to find the largest number of rabbits that can is killed with single shot, i.e. maximum Nu Mber of points lying exactly on the same line. No two rabbits sit at one point.
Input
An input contains an integer n (3≤ n ≤200) specifying the number of rabbits. Each of the next N lines in the input contains the x coordinate and the y coordinate (in this O Rder) separated by a space (2000≤ x, y ≤2000).
Output
The output contains the maximal number of rabbits situated in one line.
Sample
The same question.
See more highlights of this column: http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/
Complete code:
/*poj:32ms,204kb*/
/*ural:0.015s,148kb*/
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int INF = 1 <<;
Char str[20];
Double x[705], y[705], d[705];
int main (void)
{
int n, I, J, K;
int ans, count;
scanf ("%d", &n);
for (i = 0; i < n; ++i)
scanf ("%lf%lf", &x[i), &y[i]);
ans = 1;
for (i = 0; i < n-1. ++i)
{
for (j = i + 1, k = 0; J < N; ++j, ++k)
d[k] = (x[j] = = X[i]? INF: (Y[j]-y[i])/(X[j]-x[i));
Sort (d, D + k);
Count = 1;
for (j = 1; j < K; ++j)
{
if (fabs (D[J)-d[j-1]) < 1e-9)
{
++count;
ans = max (ans, count);
else count = 1;
}
}
printf ("%d", ans + 1);
return 0;
}