codeforces 651C(map、去重)

来源:互联网 发布:帝国cms 附件绑定域名 编辑:程序博客网 时间:2024/06/05 08:35

题目链接:http://codeforces.com/contest/651/problem/C

思路:结果就是计算同一横坐标、纵坐标上有多少点,再减去可能重复的数量(用map,pair存一下就OK了)。

#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair <int,int> pii;const int N = 2e5 + 5;map <int,int> x,y;map <pii,int> s;map <int,int> :: iterator it1;map <pii,int> :: iterator it2;int main(){    int n;    scanf("%d",&n);    ll ans = 0;    for(int i = 1; i <= n; i++)    {        int a,b;        scanf("%d %d",&a,&b);        x[a]++,y[b]++;        s[pii(a,b)]++;    }    for(it1 = x.begin(); it1 != x.end(); it1++)        ans += (ll)(it1->second)*(it1->second - 1) >> 1;    for(it1 = y.begin(); it1 != y.end(); it1++)        ans += (ll)(it1->second)*(it1->second - 1) >> 1;    for(it2 = s.begin(); it2 != s.end(); it2++)        ans -= (ll)(it2->second)*(it2->second - 1) >> 1;    printf("%I64d\n",ans);    return 0;}


0 0
原创粉丝点击