题意:给出n个点,求这n个点能组成多少个不同正方形. 思路: 枚举+快查.(再次学习了快速查找) 代码: #include <iostream> #include <algorithm> #include <cstdio> using namespace std; struct point { int x,y; }p[1001],tmp; int cmp(point a, point b) { if(a.x == b.x) return a.y < b.y; return a.x < b.x; } int main(void) { int n; while(scanf("%d",&n) != EOF && n) { int i,j,ans=0; for(i=0; i<n; i++) scanf("%d%d",&p[i].x,&p[i].y); sort(p,p+n,cmp); for(i=0; i<n; i++) for(j=i+1; j<n; j++) { tmp.x = p[i].x + p[j].y - p[i].y; tmp.y = p[i].y -(p[j].x - p[i].x); if(!binary_search(p,p+n,tmp,cmp)) continue; tmp.x = p[j].x + p[j].y - p[i].y; tmp.y = p[j].y - (p[j].x - p[i].x); if(!binary_search(p,p+n,tmp,cmp)) continue; ans++; } printf("%d/n",ans/2); } return 0; }