酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++区间模拟:计算剩余完好树木数量

根据你的问题,我们需要模拟一个区间覆盖过程:总共有 `n` 棵树(编号从 1 到 n),有 `m` 个区间,每个区间 `[Li, Ri]` 内的树木都会被摧毁,区间可能重叠,但每棵树只被摧毁一次。实际上,我们需要做的就是将所有被覆盖的树标记为摧毁,最后统计未被标记的树的数量。 我们可以用一个布尔数组或者集合来记录被摧毁的树。由于 `n < 100`,直接用数组标记非常高效。 以下是 C++ 的实现: ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n, m; cin >> n >> m; // 标记数组,true 表示该树已被摧毁 vector<bool> destroyed(n + 1, false); for (int i = 0; i < m; ++i) { int L, R; cin >> L >> R; // 将区间 [L, R] 内的树标记为摧毁 for (int j = L; j <= R; ++j) { destroyed[j] = true; } } int remaining = 0; for (int i = 1; i <= n; ++i) { if (!destroyed[i]) { remaining++; } } cout << remaining << endl; return 0; } ``` ## 代码说明 - 使用 `vector<bool>` 记录每棵树是否被摧毁。 - 遍历每个区域,将其内的所有树标记为 `true`。 - 最后统计没有被标记为 `true` 的树的数量,即为剩余完好的树木。 ## 示例 输入: ``` 10 3 2 5 3 7 8 9 ``` 过程: - 树 2~5 被摧毁 - 树 3~7 被摧毁(但 3~5 已摧毁,新摧毁 6,7) - 树 8~9 被摧毁 最终被摧毁的树:2,3,4,5,6,7,8,9,共 8 棵。 剩余:树 1 和树 10,共 2 棵。 输出: ``` 2 ``` ######[AI问答 | 499点数解答 | 2026-06-21 19:25:31]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]