#include <iostream> #include <cmath> #include <map> using namespace std; const int prime=1999; struct point{ int x,y; }p[1001]; struct hashtable{ int value; map<int,int> mymap; }myhash[prime]; void setHash(int x,int y){ int h= (x*x+y*y) % prime; myhash[h].value=1; myhash[h].mymap.insert(pair<int, int>(x, y)); } bool Search(int x,int y) { map<int,int>::iterator ptr; int h = (x*x+y*y) % prime; if(myhash[h].value!=1)return false; ptr=myhash[h].mymap.find(x); int tt=(*ptr).second; if(tt==y)return true; return false; } int work(int n){ int i,j; int sum=0; for(i=1;i<n;i++) for(j=i+1;j<=n;j++) { int x1 = p[i].x - (p[i].y - p[j].y); int y1 = p[i].y + (p[i].x - p[j].x); int x2 = p[j].x - (p[i].y - p[j].y); int y2 = p[j].y + (p[i].x - p[j].x); if(Search(x1,y1) && Search(x2,y2)) sum++; } for(i=1;i<n;i++) for(j=i+1;j<=n;j++){ int x3 = p[i].x + (p[i].y - p[j].y); int y3 = p[i].y - (p[i].x - p[j].x); int x4 = p[j].x + (p[i].y - p[j].y); int y4 = p[j].y - (p[i].x - p[j].x); if(Search(x3,y3) && Search(x3,y3)) sum++; } return sum/4; } int main(){ int n; while(1){ cin>>n; if(n==0)break; for(int j=0;j<prime;j++){ myhash[j].value=-1; } for(int i=1;i<=n;i++){ cin>>p[i].x>>p[i].y; setHash(p[i].x,p[i].y); } cout<<work(n)<<endl; } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。