C++ 借助大顶堆解决御坂游戏中怪物死亡顺序问题
要解决这个问题,我们需要不断找到当前生命值最高的怪物并对其造成伤害,直到所有怪物死亡。由于怪物的数量可能非常大(最多可达 $3 \times 10^5$),我们需要一个高效的数据结构来快速找到当前生命值最高的怪物。 这里,我们可以使用一个大顶堆(优先队列)来维护怪物的生命值。每次从堆中取出当前生命值最高的怪物,并对其造成伤害。如果伤害后生命值变为非正数,则记录该怪物已死亡,否则将更新后的生命值重新放回堆中。 以下是实现这个算法的 C++ 代码: ```cpp #include <iostream> #include <vector> #include <queue> #include <tuple> using namespace std; int main() { int n, k; cin >> n >> k; // 使用优先队列(大顶堆)存储怪物编号和生命值 priority_queue<pair<long long, int>> pq; vector<long long> monsterHealth(n); for (int i = 0; i < n; ++i) { cin >> monsterHealth[i]; pq.push({monsterHealth[i], i + 1}); // pair 中 first 是生命值,second 是怪物编号 } vector<int> deathOrder; while (!pq.empty()) { auto top = pq.top(); pq.pop(); long long health = top.first; int id = top.second; health -= k; if (health > 0) { pq.push({health, id}); // 如果生命值还大于0,则重新放回堆中 } else { deathOrder.push_back(id); // 否则记录死亡顺序 } } // 输出死亡顺序 for (int id : deathOrder) { cout << id << " "; } return 0; } ``` 逻辑点 1. 使用大顶堆:优先队列(大顶堆)确保每次都能快速找到当前生命值最高的怪物。 2. 处理怪物生命值更新:如果怪物在受到伤害后生命值仍大于0,则更新其生命值并重新放入堆中。 3. 记录死亡顺序:当怪物生命值小于或等于0时,记录其编号到死亡顺序列表中,最后输出该列表。 这样,我们就能高效地确定所有怪物的死亡顺序。 ######[AI写代码神器 | 568点数解答 | 2025-01-10 09:38:47]
- Python代码实现:带窗口、滚轴、重力、惯性与怪物的类马里奥游戏(字节豆包 | 964点数解答 | 2025-06-13 19:11:12)196
- C3期末:精准求解 3 - 20 范围内数列第 k 项值及注意要点(字节豆包 | 242点数解答 | 2025-06-15 11:26:19)136
- C++求解:查找3 - 20项数列第k项值及注意要点(字节豆包 | 325点数解答 | 2025-06-15 11:27:11)155
- 重新定义字母大小关系:让 “L 队” 字典序小于 “某 E” 的代码实现与分析(字节豆包 | 595点数解答 | 2025-12-03 19:44:59)64
- 深入解析格雷码生成算法:递归求解与代码实现(DeepSeek | 443点数解答 | 2026-01-05 12:21:49)51
- 破解Jenkins构建Java项目“数据收集等待过长”难题的实用攻略( | 389点数解答 | 2024-01-18 09:27:30)328
- Jenkins 构建 Java 项目“数据收集等待过长”难题的 10 大解决策略(百度文心 | 551点数解答 | 2024-01-18 09:27:54)289
- C++ 求解整数减少至 0 使奇数次数最少的最小纠结次数问题(字节豆包 | 229点数解答 | 2024-08-21 16:33:58)259
- C++ 实现按复杂规则计算业务员工资,附完整代码!(字节豆包 | 337点数解答 | 2024-11-18 17:48:36)284
- C++ 实现:求解二进制字符串中消除连续 m 个 0 的最少操作次数(GPT | 876点数解答 | 2024-11-30 23:07:54)212
- 奇幻游戏积分排序:奇数升序偶数降序,Python代码轻松搞定!(DeepSeek | 233点数解答 | 2025-04-12 17:08:17)210
- C++实现奇幻游戏积分排序:奇数升序偶数降序!(DeepSeek | 237点数解答 | 2025-04-12 17:09:06)229