Educational Codeforces Round 11 D. Number of Parallelograms 【pair的使用】

平行四边形对角线两点连线的中点相同,利用这个性质可以快速计算。

#include<bits/stdc++.h>
using namespace std;
map<pair<int,int>,int>mp;
int x[2048],y[2048];

int main()
{
    int n,i,j;
    long long ans;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d%d",&x[i],&y[i]);
    mp.clear();
    ans=0;
    for(i=0;i<n;i++)
        for(j=i+1;j<n;j++)
    {
        if(mp[make_pair(x[i]+x[j],y[i]+y[j])])
            ans+=mp[make_pair(x[i]+x[j],y[i]+y[j])];
        mp[make_pair(x[i]+x[j],y[i]+y[j])]++;
    }
    printf("%lld\n",ans);
    return 0;
}

你可能感兴趣的:(Educational Codeforces Round 11 D. Number of Parallelograms 【pair的使用】)