在判断的时候不要用等于号!!!!
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#define Mn 300
using namespace std;
#define sqr(x) ((x) * (x))
int n;
struct point
{
double x,y;
}p[300+16];
double dis(const point a,const point b)
{
return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
}
struct alpha
{
double v;
bool flag;
bool friend operator <(const alpha &a,const alpha &b)
{
return a.v < b.v;
}
}alp[Mn+15];
void solve()
{
int i,j;
int MAX =1;
for( i = 0;i < n;i++)
{
int t = 0;
for( j = 0;j < n;j++)
{
if(i == j)
continue;
double theta,phi,D;
D = dis(p[i],p[j]);
if(D > 2.0 )
continue;
theta = atan2(p[j].y - p[i].y,p[j].x - p[i].x);
phi = acos(D / (2.0 ));
alp[t].v = theta - phi;
alp[t++].flag = true;
alp[t].v = theta + phi;
alp[t++].flag = false;
}
sort(alp,alp + t);
int sum = 1;
for( j = 0;j < t;j++)
{
if(alp[j].flag)
sum ++;
else
sum --;
if(sum > MAX)
MAX = sum;
}
}
printf("%d\n",MAX);
}
int main()
{
int i;
while(~scanf("%d",&n)&&n)
{
for(i=0;i<n;i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
solve();
}
}