P3913 车的攻击 题解

ataraxyyeah / 2023-09-01 / 原文

因为这道题确实让我学到了一些东西,所以来记录一下

STL中有一个尊贵的宝物,叫做unique,unique的使用要建立已经sort好的前提下,所以我们的思路是对

r 和 c 分别 sort,再用unique去重。

关于unique的原理:unique并未创造一个新的数组,而是将重复部分移至后端,所以要用指针特性减去。

代码:

点击查看代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,k;
ll r[1000005],c[1000005];
int main()
{
	scanf("%lld%lld",&n,&k);
	for(ll i=1;i<=k;i++)
	{
		cin>>r[i]>>c[i];
	}
	sort(r+1,r+k+1);
	sort(c+1,c+k+1);
	ll sizer=unique(r+1,r+k+1)-(r+1);
	ll sizec=unique(c+1,c+k+1)-(c+1);
	cout<<n*n-(n-sizer)*(n-sizec)<<endl;
	return 0;
}