酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

题目描述 御坂正在玩一个电脑游戏。他的角色正在杀死一些怪物。有n 个怪物,编号从1−n ,第i 个怪物最初的生命值为ai 。 御坂的角色可以对当前生命值最高的怪物造成k 点伤害。如果其中有几个,则选择编号较小的一个。如果怪物的生命值小于或等于0,在御坂使用他的能力后,它就会死亡。 御坂使用他的能力,直到所有怪物死亡。你的任务是确定怪物死亡的顺序。 输入描述 第一行是怪物的数量n(1≤n≤3×105) 和御坂每次可以对怪物造成的伤害k(1≤k≤109) 。 第二行是每个怪物的生命值ai(1≤ai≤109) 。 输出描述 输出怪物的死亡顺序,语言方向:C++,系统环境:Windows,代码风格:时间复杂度优先

```cpp #include <iostream> #include <vector> #include <queue> using namespace std; struct Monster { int health; int index; bool operator<(const Monster& other) const { return health < other.health; } }; int main() { int n, k; cin >> n >> k; priority_queue<Monster> pq; for (int i = 0; i < n; ++i) { int health; cin >> health; pq.push({health, i + 1}); } vector<int> deathOrder; while (!pq.empty()) { Monster current = pq.top(); pq.pop(); deathOrder.push_back(current.index); current.health -= k; if (current.health > 0) { pq.push(current); } } for (int i = 0; i < n; ++i) { cout << deathOrder[i] << " "; } return 0; } // 逻辑点: // 1. 使用优先队列(堆)来维护当前生命值最高的怪物,以便每次选择生命值最高的怪物进行攻击。 // 2. 将怪物结构体按生命值降序排列,并记录怪物的初始编号,以便输出最终的死亡顺序。 // 3. 循环处理每个怪物,每次造成伤害后检查生命值是否大于0,若是则重新加入优先队列,直到所有怪物死亡。 ``` [2025-01-06 19:43:03 | AI写代码神器 | 730点数解答]

相关提问