#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct node { int x,y; }; node point[1010]; node mid[1010*1010]; int cmp(node A,node B) { if(A.x==B.x) return A.y<B.y; return A.x<B.x; } int main() { int t; int i,j; int sum; int n; int cnt;int k=0; scanf("%d",&t); while(t--) { scanf("%d",&n); sum=0; cnt=0; for(i=0;i<n;i++) scanf("%d%d",&point[i].x,&point[i].y); for(i=0;i<n;i++) for(j=i+1;j<n;j++) { mid[cnt].x=(point[i].x+point[j].x); mid[cnt].y=(point[i].y+point[j].y); cnt++; } sort(mid,mid+cnt,cmp); //中点排序//对于一个平行四边形,其两条对角线的的交点是其中点。因此可以计算每条线段的中点是否相等判断是否相等 int count=1; for(i=0;i<cnt;i++) { if(mid[i].x==mid[i+1].x&&mid[i].y==mid[i+1].y) count++; else { sum+=(count-1)*count/2; count=1; } } printf("Case %d: ",++k); printf("%d\n",sum); } return 0; } |
Double click to view unformatted code.