Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:625MS

Posted by Cunch at 2010-03-12 22:09:59 on Problem 2002
In Reply To:625MS Posted by:donkeyinacm at 2010-03-05 11:29:41
> #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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator