题意,给一堆点,保证不存在三点共线,问从这些点里任选四个,可以组成多少个不同的平形四边形
很巧妙,利用了平行四边形对角线互相平分的性质(两条对角线中点共点),这样n^2暴力每一条直线,把所有共中点的直线里选两条即可组成平行四边形
#include<bits/stdc++.h>
using namespace std;
int x[2005],y[2005];
int main()
{
int n,j,i;
long long ans=0;
map<pair<double,double>,int>p;
cin>>n;
for(i=0;i<n;i++)
{
cin>>x[i]>>y[i];
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
double nowx=(x[i]+x[j])/2.0;
double nowy=(y[i]+y[j])/2.0;
pair<double,double>pp;
pp=make_pair(nowx,nowy);
if(!p.count(pp))
{
p[pp]=1;
}
else
{
ans+=p[pp];
p[pp]++;
}
}
}
cout<<ans<<endl;
}

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



