御坂打怪解谜:用 Python 最大堆确定怪物死亡顺序
为了确定怪物死亡的顺序,我们可以使用一个最大堆(优先队列)来持续跟踪当前生命值最高的怪物。在每次操作中,我们选择当前堆顶元素(即生命值最高的怪物,如果有多个则选择编号最小的),并对其造成伤害。如果该怪物生命值变为非正数,则将其从堆中移除,并记录下其死亡顺序。重复这个过程直到堆为空。 以下是实现这个逻辑的Python代码: ```python import heapq def monster_death_order(n, k, health_values): # 使用负值来表示堆,因为Python的heapq是最小堆,这样负值最大的(即原始值最大的)会在堆顶 # 同时存储怪物的编号和生命值,以处理生命值相同时编号较小者优先的情况 max_heap = [(-health, i + 1) for i, health in enumerate(health_values)] heapq.heapify(max_heap) death_order = [] while max_heap: # 取出当前生命值最高的怪物(注意取负值是为了在最小堆中模拟最大堆) health, monster_id = heapq.heappop(max_heap) health = -health # 恢复为正值 # 对怪物造成伤害 health -= k # 如果怪物生命值小于等于0,记录其死亡顺序 if health <= 0: death_order.append(monster_id) else: # 如果怪物未死亡,则重新放入堆中 heapq.heappush(max_heap, (-health, monster_id)) return death_order # 输入部分 n, k = map(int, input().split()) health_values = list(map(int, input().split())) # 调用函数并输出结果 print(" ".join(map(str, monster_death_order(n, k, health_values)))) ``` 逻辑点需要注意: 1. 使用负值处理最大堆:由于Python的`heapq`库默认实现的是最小堆,我们通过存储负值来模拟最大堆的行为。 2. 处理多个最高生命值的情况:在堆中,如果两个怪物的生命值相同,由于我们同时存储了怪物的编号,编号较小的怪物会先被弹出(因为Python的`tuple`比较是按元素顺序进行的)。 3. 性能优化:使用堆数据结构可以确保每次取出和插入操作的时间复杂度都是O(log n),这对于处理多达300,000个怪物来说是高效的。 ######[AI写代码神器 | 574点数解答 | 2025-01-10 09:37:59]
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)460
- Python代码实现:带窗口、滚轴、重力、惯性与怪物的类马里奥游戏(字节豆包 | 964点数解答 | 2025-06-13 19:11:12)196
- 解决 3ds Max 中 MAXScript FileIn 异常及语法错误的全攻略(字节豆包 | 459点数解答 | 2025-09-09 14:24:24)145
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)416
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)408
- 重新定义字母大小关系:让 “L 队” 字典序小于 “某 E” 的代码实现与分析(字节豆包 | 595点数解答 | 2025-12-03 19:44:59)64
- 深入解析格雷码生成算法:递归求解与代码实现(DeepSeek | 443点数解答 | 2026-01-05 12:21:49)51
- C++实现修仙之旅:等级、门派、渡劫一个不少!(字节豆包 | 1333点数解答 | 2026-01-03 08:22:41)40
- C++实现修仙之旅:从炼气期到元婴期的奇幻冒险(字节豆包 | 1521点数解答 | 2026-01-03 08:23:24)45
- C++实现修仙之旅:从新手到强者的奇幻冒险(字节豆包 | 1517点数解答 | 2026-01-03 08:24:16)43
- C++实现修仙游戏:从炼气期到渡劫飞升的奇幻之旅(字节豆包 | 1898点数解答 | 2026-01-03 08:25:18)49
- C++实现修仙游戏:含等级修为,门派渡劫剧情全体验!(字节豆包 | 2789点数解答 | 2026-01-03 08:26:30)39