洛谷-P3913 车的攻击
洛谷-P3913 车的攻击
题目描述
N×N 的国际象棋棋盘上有\(K\) 个车,第\(i\)个车位于第\(R_i\)行,第\(C_i\) 列。求至少被一个车攻击的格子数量。
车可以攻击所有同一行或者同一列的地方。
输入格式
第1 行,2 个整数\(N,K\)。
接下来K 行,每行2 个整数\(R_i,C_i\)。
输出格式
1 个整数,表示被攻击的格子数量。
输入输出样例
输入 #1
3 2
1 2
2 2
输出 #1
7
说明/提示
- 对于30% 的数据,\(1 \le N \le 10^3; 1 \le K \le 10^3\);
- 对于60% 的数据,\(1 \le N \le 10^6; 1 \le K \le 10^6\);
- 对于100% 的数据,\(1 \le N \le 10^9; 1 \le K \le 10^6; 1 \le R_i , C_i \le N\)。
C++代码
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
long long n, k, rr=1, cc=1;
scanf("%lld%lld", &n, &k);
int r[k], c[k];
for (int i=0; i<k; ++i)
scanf("%d%d", &r[i], &c[i]);
sort(r, r+k);
sort(c, c+k);
for (int i=1; i<k; ++i) {
if (r[i] != r[i-1])
++rr;
if (c[i] != c[i-1])
++cc;
}
printf("%lld\n", n * n - (n - rr) * (n - cc));
return 0;
}