题意:给你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;
}

本文介绍了一种算法,用于解决给定点集上平行四边形计数的问题。通过利用坐标系内平行四边形对角线性质,该算法有效地统计了所有可能的平行四边形组合。
3194

被折叠的 条评论
为什么被折叠?



