基于布尔数组标记法求解重叠区域摧毁后的剩余树木数量
根据题意,需要计算在多个可能重叠的区域被摧毁后,剩余完好的树木数量。由于区域可能重合,每棵树只被摧毁一次,因此只需统计所有被摧毁树木的并集大小,然后用总树木数减去该并集大小。 一种高效且直观的方法是使用一个布尔数组标记每棵树是否被摧毁,最后统计未被标记的数量。考虑到n<100,这种方法的复杂度O(n*m)完全可行。 以下是C++实现: ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n, m; cin >> n >> m; vector<bool> destroyed(n + 1, false); // 下标从1开始,便于对应树木编号 for (int i = 0; i < m; i++) { int L, R; cin >> L >> R; // 确保R不超过n,L不小于1(题目保证合法,但可加保护) if (L < 1) L = 1; if (R > n) R = n; 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; } ``` 这个解法直接遍历每个区域的树木并标记,最后统计未标记的数量。由于每棵树只会被标记一次(因为重复区域标记为true但不会改变值),所以结果正确。时间复杂度O(n*m),空间复杂度O(n)。 ######[AI问答 | 368点数解答 | 2026-08-02 15:40:01]
- 易语言读取文本文件并显示到超级列表框:代码示例与注意要点(DeepSeek | 571点数解答 | 2025-08-23 20:54:40)337
- 易语言:读取并显示特定文本到超级列表框,还能增加新数据的方法与要点(DeepSeek | 1317点数解答 | 2025-08-23 20:58:40)326
- mallshop商城网站:数据库设计与强大业务功能全揭秘(GPT | 257点数解答 | 2024-12-09 14:08:15)354
- RAG生产项目部署:必要动作与开发建议(字节豆包 | 1046点数解答 | 2026-07-02 19:33:33)45
- Python 高效求解:让数列变身接龙数列最少需删多少数?(字节豆包 | 493点数解答 | 2025-12-13 10:25:59)116
- Telegram流量查询机器人开发全攻略(字节豆包 | 1598点数解答 | 2026-05-31 14:15:26)48
- C++实现计算最少添加数字次数以匹配两个数组元素(字节豆包 | 714点数解答 | 2026-03-08 19:44:54)85
- 用Python处理商品销售数据:替换类别、合并类目并输出前5行(百度文心 | 486点数解答 | 2024-08-23 09:14:21)378
- Python 破解:计算序列中满足特定取余条件元素的数量(字节豆包 | 174点数解答 | 2025-05-13 21:29:55)251
- 一文搞定!无名杀“再生安瓿”技能代码全解析及注意事项(字节豆包 | 464点数解答 | 2025-06-15 20:06:30)240
- C# 实现商品类:数量限制 100 及开发注意要点(字节豆包 | 737点数解答 | 2025-09-03 14:44:56)157
- 易语言多线程实战:获取进程信息、读写内存与多线程协同操作(字节豆包 | 790点数解答 | 2025-11-28 03:08:24)113