用C++做此题题目描述 校门外有一片由n排m列的树林,每棵树的位置都在第x排y列的坐标上。x为大于等于1小于等于n的整数,y为大于等于1小于等于m的整数。为了方便同学们休息,学校想在树林里修建k座长方形的凉亭,每个凉亭的位置由凉亭的左上角坐标(x1,y1)和右下角坐标(x2,y2)确定。(1<=x1<=x2<=n,1<=y1<=y2<=m)为了修建凉亭需要把凉亭内所有的树木砍掉。凉亭位置可能会有重复。修建k做凉亭之后,还剩下多少树木。 输入 第一行三个整数n,m,k。n表示排数,m表示列数,k表示凉亭数。 接下来k行,每行4个整数(x1,y1),(x2,y2)分别表示每个凉亭的左上角位置和右下角位置。(1<=x1<=x2<=n,1<=y1<=y2<=m) 输出 按要求输出,还剩下多少棵树 样例输入 5 5 2 1 1 2 2 3 3 5 5 样例输出 12
时间: 2024-04-10 10:34:09 浏览: 128
你好!下面是一个使用C++解决这个问题的示例代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
struct Point {
int x, y;
Point(int x = 0, int y = 0) : x(x), y(y) {}
};
int countRemainingTrees(int n, int m, int k, vector<Point>& topLeft, vector<Point>& bottomRight) {
vector<vector<int>> forest(n + 1, vector<int>(m + 1, 1));
for (int i = 0; i < k; i++) {
for (int x = topLeft[i].x; x <= bottomRight[i].x; x++) {
for (int y = topLeft[i].y; y <= bottomRight[i].y; y++) {
forest[x][y] = 0;
}
}
}
int count = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
count += forest[i][j];
}
}
return count;
}
int main() {
int n, m, k;
cin >> n >> m >> k;
vector<Point> topLeft(k);
vector<Point> bottomRight(k);
for (int i = 0; i < k; i++) {
cin >> topLeft[i].x >> topLeft[i].y >> bottomRight[i].x >> bottomRight[i].y;
}
int remainingTrees = countRemainingTrees(n, m, k, topLeft, bottomRight);
cout << remainingTrees << endl;
return 0;
}
```
你可以将上述代码保存为一个名为 `main.cpp` 的文件,并使用C++编译器编译运行它。输入和输出的格式与你提供的示例相同。希望这能帮助到你!如果你有任何其他问题,请随时问我。
阅读全文