题意:给你n个点的坐标,一条直线上不会有三个及以上的点,求能组成多少平行四边形。
题解:在平面直角坐标系中,平行四边形其中一条对角线上的两个端点的横坐标(纵坐标)的和,等于另一条对角线两个端点的横坐标(纵坐标)的和 。
AC代码:
#include<iostream>
#include<map>
#include<math.h>
#include<stdio.h>
using namespace std;
map<pair<int,int>,int> e;
int main()
{
int n,i,x[2005],y[2005],j,ans=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d%d",&x[i],&y[i]);
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
{
ans+=e[make_pair(x[i]+x[j],y[i]+y[j])];
e[make_pair(x[i]+x[j],y[i]+y[j])]++;
}
}
cout<<ans<<endl;
return 0;
}