题意:给你n个点 求能组成平行四边形的个数
就是模拟 求四个点的横坐标之差和纵坐标之差
两两相等就能构成平行四边形
也可以用向量来求,不过要用到STL map pair 什么的
#include<stdio.h>
#include<algorithm>
struct aa
{
int x, y;
int a,b;
}s[2000010],cc[2001];
int cmp(aa xx,aa yy)
{
return xx.x<yy.x||(xx.x==yy.x&&xx.y<yy.y);//排序便于求相等
}
int cnp(aa x,aa y)
{
return x.a<y.a||(x.a==y.a&&x.b<y.b);//点的坐标排序
}
using namespace std;
int main()
{
int n;
int a[2001],b[2001];
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&cc[i].a,&cc[i].b);
}
sort(cc,cc+n,cnp);
int k=0;
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
s[k].x=cc[j].a-cc[i].a;
s[k++].y=cc[j].b-cc[i].b;
}
}
sort(s,s+k,cmp);
int pos=0,m=0,sum=0;
for(int i=1;i<k;i++)
{
if(s[i].x!=s[i-1].x||s[i].y!=s[i-1].y)
{
m=i-pos;
pos=i;
sum+=(m*(m-1))/2;//两两组合的个数
}
}
printf("%d\n",sum/2);//要四条边两两互相平行相等
}