.
一开始我用的是unordered_map
#include <iostream>
#include <unordered_map>
using namespace std;
unordered_map<int ,int > r;
unordered_map<int ,int > c;
typedef long long int ll;
int main()
{
ios::sync_with_stdio(false);// 取消同步流
ll n,k,R,C;
ll res;
cin>>n>>k;
for(int i=1;i<=k;i++)
{
cin>>R>>C;
r[R]=c[C]=1;
}
res=(r.size()+c.size())*n-r.size()*c.size();
cout<<res<<endl;
return 0;
}
但是这样是过不了的,当K很大的时候,每增加一条语句都会很大。所以我们还是得用数组来做~,
#include <iostream>
#include <unordered_map>
#include <algorithm>
#define Max 1000005
using namespace std;
int r[Max],c[Max];
typedef long long int ll;
int main()
{
ios::sync_with_stdio(false);// 取消同步流
ll n,k,R,C;
cin>>n>>k;
for(int i=1;i<=k;i++)
{
cin>>r[i]>>c[i];
}
sort(r+1,r+k+1);
sort(c+1,c+k+1);
ll num1=unique(r+1,r+k+1)-r-1;
ll num2=unique(c+1,c+k+1)-c-1;
cout<<(num1+num2)*n-num1*num2;
return 0;
}