题意
给定一个N*M的矩形块被分割成1 * 1的木块,选择去除若干行若干列后,还剩下多少木块?
思路
把总的木块减去要去除的行的木块数和列的木块数,同时加上被重复去除的木块数
注意:在输入行或者列号时 ,可能出现行或者列号重复的情况。
Solution
#include <iostream>
using namespace std;
int main() {
int n, m, q, flag, t;
int lie, hang; //记录输入了多少行和多少列
cin >> n >> m >> q;
lie = hang = 0;
int sum = n * m; //先求出总块数
bool lvis[110] = { false }, hvis[110] = { false }; //记录行号和列号是否输入过
for (int i = 1; i <= q; i++) {
cin >> flag >> t;
if (flag && !lvis[t]) {
lvis[t] = true;
lie++;
sum -= n;
}
else {
hvis[t] = true;
hang++;
sum -= m;
}
}
cout << sum + lie * hang << endl; //加上被重复去除的木块
return 0;
}