2017 JUST Programming Contest 3.0 B. Linear Algebra Test
要你求行数与列数相等的对数有多少种?
思路:利用map可以把复杂度降到O(n)
需要注意的是
2 3
3 2
这一类的情况结果是2对,而不是一对;另外由于数据是1e9,所以以后见到1e9都用上long long
#include <iostream>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<map>
using namespace std;
const int maxn=1e5+10;
typedef long long ll;
struct node
{
    ll col,row;
    int flag;
};
struct mnode
{
    int flag;
};
int main()
{
    ll t;
    scanf("%lld",&t);
    while(t--)
    {
        map<ll,node> m;
       // map<mnode,mnode>mab;
       map<int,int>mab;
        ll n;
        scanf("%lld",&n);
        ll a,b;
        ll ans=0,flag=0;
        for(ll i=1;i<=n;i++)
            {
                scanf("%lld%lld",&a,&b);
                mab[a]=b;
                    m[a].col+=1;
                    m[b].row+=1;
            }
        map<ll,node>::iterator it;
        for(it=m.begin();it!=m.end();it++){
                ans+=it->second.col*it->second.row;
        }
        printf("%lld\n",ans-flag);
    }
    return 0;
}

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号