酷代码 AI
菜单
服务商

本庭院里有一排树,一共有n(n<100)棵。机器人们一共把m个区域的树木都摧毁了。每个区域都包含了连续的几棵树木,其中第i个区域包含的树木为从Li开始到Ri为止之间的所有的树木。当然了,这些区域有可能会重合,但是每棵树只会被摧毁一次。请你计算一下最终还剩下几棵完好无损的树木? 输入: 第一行两个数n和m代表树的总数和区域数。 接下来m行,每行两个数Li和Ri,表示每个区域的范围。 输出: 输出1个数,表示剩余完好无损的树木棵数。 输入样例: 7 3 1 3 3 4 6 6 输出样例: 2 使用c++语言

```cpp #include <iostream> using namespace std; const int MAXN = 100; bool destroyed[MAXN + 1]; int main() { int n, m; cin >> n >> m; // 初始化所有树都未被摧毁 for (int i = 1; i <= n; i++) { destroyed[i] = false; } // 标记被摧毁的树 for (int i = 0; i < m; i++) { int Li, Ri; cin >> Li >> Ri; for (int j = Li; j <= Ri; j++) { destroyed[j] = true; } } // 统计剩余完好的树的数量 int remaining = 0; for (int i = 1; i <= n; i++) { if (!destroyed[i]) { remaining++; } } cout << remaining << endl; return 0; } ``` 代码解释: 1. 数组初始化:定义一个布尔数组`destroyed`,用于标记每棵树是否被摧毁。数组大小为`MAXN + 1`,以保证可以处理从1到`n`的树编号。 2. 输入处理:读取树的总数`n`和区域数`m`。接着读取每个区域的起始位置`Li`和结束位置`Ri`,并将该区域内的树标记为已摧毁。 3. 标记被摧毁的树:对于每个区域,使用一个循环将从`Li`到`Ri`的树在`destroyed`数组中标记为`true`。 4. 统计剩余树木:遍历`destroyed`数组,统计值为`false`的元素数量,即未被摧毁的树的数量。 5. 输出结果:输出剩余完好无损的树木棵数。 [2026-02-08 19:31:04 | AI问答 | 438点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多