| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
625MS#include <iostream>
#include <cmath>
using namespace std;
#define MAXN 1005
#define INF 20005
#define MAXH 999999
#define esp 1e-10
int n,x2,y2,x4,y4,res;
struct point
{
int x,y;
point *next;
};
point P[MAXN];
point *hash[MAXH];
int cmp(const void *a,const void *b)
{
if(static_cast<const point*>(a)->x==static_cast<const point*>(b)->x)
return static_cast<const point*>(a)->y-static_cast<const point*>(b)->y;
return static_cast<const point*>(a)->x-static_cast<const point*>(b)->x;
}
bool exist(int x,int y)
{
bool b[2]={false};
int hv=(x*x+y*y)%MAXH;
point *p=hash[hv];
while(p!=NULL)
if(p->x==x&&p->y==y)
return true;
else
p=p->next;
return false;
}
int main()
{
//freopen("c:/aaa.txt","r",stdin);
int i,j;
while(scanf("%d",&n)&&n)
{
for(i=0;i<MAXH;i++)
hash[i]=NULL;
res=0;
for(i=0;i<n;i++)
{
scanf("%d%d",&P[i].x,&P[i].y);
int hv=(P[i].x*P[i].x+P[i].y*P[i].y)%MAXH;
point *p=new point();
p->next=hash[hv];
p->x=P[i].x;
p->y=P[i].y;
hash[hv]=p;
}
qsort(P,n,sizeof(P[0]),cmp);
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
if(P[j].y>P[i].y)
{
if(P[j].x==P[i].x&&P[j].y-P[i].y==1 || P[j].y==P[i].y&&P[j].x-P[i].x==1)
continue;
int x1=P[i].x;
int y1=P[i].y;
int x3=P[j].x;
int y3=P[j].y;
x2=(x1+x3+y3-y1)/2;
y2=(y1+y3+x1-x3)/2;
x4=(x1+x3-y3+y1)/2;
y4=(y1+y3-x1+x3)/2;
double len1=((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))*2;
double len2=((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));
if(fabs(len1-len2)>esp)
continue;
if(exist(x2,y2)&&exist(x4,y4))
{
// printf("1 x1:%d y1:%d x2:%d y2:%d x3:%d y3:%d x4:%d y4:%d\n",x1,y1,x2,y2,x3,y3,x4,y4);
res++;
}
}
}
printf("%d\n",res);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator