酷代码 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; int main() { int n, k; cin >> n >> k; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } priority_queue<pair<int, int>> pq; // 大顶堆,存储怪物生命值和编号 for (int i = 0; i < n; i++) { pq.push({a[i], i + 1}); // 初始化堆 } vector<int> deathOrder; while (!pq.empty()) { pair<int, int> top = pq.top(); pq.pop(); top.first -= k; // 减少生命值 if (top.first <= 0) { deathOrder.push_back(top.second); // 记录死亡怪物编号 } else { pq.push(top); // 放回堆中 } } for (int num : deathOrder) { cout << num << " "; } cout << endl; return 0; } // 注意 1:在处理堆的操作时,要确保正确理解和使用堆的特性。 // 注意 2:输入数据的范围较大,注意处理可能的边界情况。 // 注意 3:输出结果要按照题目要求的格式进行输出。 ``` [2025-02-11 21:51:00 | AI写代码神器 | 339点数解答]

相关提问