题意:http://www.lightoj.com/volume_usersubmissions.php
思路:只要两条线的中点交于一点 就能够构成平行四边形 即只需要遍历任意两个点的中点 然后统计
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<queue> #include<map> #include<vector> #include<math.h> #include<string> using namespace std; #define INF 0x3f3f3f3f #define LL long long #define N 1009 #define Lson rood<<1 #define Rson rood<<1|1 #define PI acos(-1) struct point { int x,y; }a[N],q[N*N]; int cmp(point e,point f) { if(e.x!=f.x) return e.x<f.x; return e.y<f.y; } int main() { int T,t=1; scanf("%d",&T); while(T--) { int n,ans=0; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d%d",&a[i].x,&a[i].y); for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { q[ans].x=a[i].x+a[j].x; q[ans++].y=a[i].y+a[j].y; } } sort(q,q+ans,cmp); int s=1,sum=0; for(int i=1;i<ans;i++) { if(q[i].x==q[i-1].x&&q[i].y==q[i-1].y) s++; else { sum+=s*(s-1)/2; s=1; } } sum+=s*(s-1)/2; printf("Case %d: %d ",t++,sum); } return 0; }