#include<cstdio> #include<cstring> #include<algorithm> #define N 1005 using namespace std; struct node { int x,y; }s[N],mid[N*N]; bool cmp(node a,node b) { if(a.x!=b.x) return a.x<b.x; return a.y<b.y; } int main() { int t,cnt=1; scanf("%d",&t); while(t--) { int n,flag=0; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d%d",&s[i].x,&s[i].y); for(int i=0;i<n;i++) for(int j=i+1;j<n;j++) //j从i+1开始判断,避免重复计算 { mid[flag].x=s[i].x+s[j].x;//记录中点坐标,不除以2也一样,避免有小数点 mid[flag++].y=s[i].y+s[j].y; } sort(mid,mid+flag,cmp); int ans=1,sum=0; for(int i=1;i<flag;i++) { if(mid[i].x==mid[i-1].x&&mid[i].y==mid[i-1].y) ans++; else { sum+=ans*(ans-1)/2;//排列组合 ans=1; } } printf("Case %d: %d\n",cnt++,sum); } return 0; } |
Double click to view unformatted code.