20pts,求助(站外)
  • 板块题目总版
  • 楼主zxw1234567
  • 当前回复2
  • 已保存回复2
  • 发布时间2025/2/5 11:41
  • 上次更新2025/2/5 16:06:48
查看原帖
20pts,求助(站外)
1356230
zxw1234567楼主2025/2/5 11:41

2AC\color{green}AC,8TLE\color{black}TLE

题目:简单的小游戏

时间限制:1000MS 空间限制:128MB

题目描述

御坂正在玩一个电脑游戏。他的角色正在杀死一些怪物。有nn个怪物,编号从1n1−n,第i个怪物最初的生命值为AiAi
御坂的角色可以对当前生命值最高的怪物造成kk点伤害。如果其中有几个,则选择编号较小的一个。如果怪物的生命值小于或等于0,在御坂使用他的能力后,它就会死亡。 御坂使用他的能力,直到所有怪物死亡。你的任务是确定怪物死亡的顺序。

输入描述

第一行是怪物的数量n(1n3×105n(1≤n≤3×10^5)和御坂每次可以对怪物造成的伤害k(1k109)k(1≤k≤10^9)。第二行是每个怪物的生命值Ai(1Ai109)Ai(1≤Ai≤10^9)

输出描述

输出怪物的死亡顺序
样例
输入1:
3 2
1 2 3
输出1:
2 1 3
——
输入2:
2 3
1 1
——
输出2:
1 2

提示

第一组样例中,怪物的生命值变化为:

第二组样例中,怪物的生命值变化为:
对于100%的数据,
1<=n<=3105,1<=k<=1091<=n<=3∗10^5,1<=k<=10^9
1<=Ai<=1091<=Ai<=10^9
代码:

#include <bits/stdc++.h>
using namespace std;
int main(){
	int n,m;
	cin>>n>>m;
	int a[n+1];
	for(int i=1;i<=n;i++) cin>>a[i];
	while(1){
		int k=a[1];
		for(int i=2;i<=n;i++) k=max(k,a[i]);
		for(int i=1;i<=n;i++){
			if(a[i]==k && k>0){
				a[i]-=m;
				if(a[i]<=0) cout<<i<<' ';
				break;
			}else if(k<=0){
				return 0;
			}
		}
	}
	return 0;
}
2025/2/5 11:41
加载中...