站外题求助,20pts
  • 板块题目总版
  • 楼主封禁用户
  • 当前回复4
  • 已保存回复5
  • 发布时间2025/2/3 11:46
  • 上次更新2025/2/3 17:13:47
查看原帖
站外题求助,20pts
1356230
封禁用户楼主2025/2/3 11:46

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

题目:简单的小游戏

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

题目描述

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

输入描述

第一行是怪物的数量n(1n3×105)n(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/3 11:46
加载中...