求助,阳历过了,却只拿了20分
  • 板块灌水区
  • 楼主Braised_fish
  • 当前回复15
  • 已保存回复15
  • 发布时间2024/8/9 10:59
  • 上次更新2024/8/9 11:47:20
查看原帖
求助,阳历过了,却只拿了20分
992550
Braised_fish楼主2024/8/9 10:59

题目``

王者荣耀

题目描述

你在游戏里扮演的角色收到了一个任务:去干掉大BossBoss。BossBoss有h2h2点生命值和a2a2点攻击力。你不想死那么多回,于是就去商店氪了一大堆强力生命回复药剂来准备战斗。

你的角色有h1h1点初始生命和a1a1点攻击力。还有无限多的强力生命回复药剂,每一瓶都可以给你回复c1c1点血。每一瓶药剂都是完全一样的,数据保证c1>a2c1>a2。

战斗包含多个回合。在你的回合中,既可以攻击BossBoss(可以将它的生命值减少a1a1),也可以喝下一瓶药剂(可将你的生命值增加c1c1,你的生命值可以超过 h1h1)。而如果你和BossBoss都没有死的话,BossBoss就会攻击你,将你的生命值减少a2a2。战斗会在任意一方死亡后结束。

现在你想知道用最短时间获胜的策略,假设你有无数瓶药水,数据保证你总能赢。

输入格式

输入第一行,包含三个空格隔开的正整数h1,a1,c1h1,a1,c1,分别代表你的初始生命值,攻击力和一瓶强效生命药剂能回复的生命值。

输入第二行,包含两个空格隔开的正整数h2,a2h2, a2,分别代表BossBoss的生命值和攻击力。

1≤h1,h2,a1≤100,2≤a2<c1≤1001≤h1,h2,a1≤100,2≤a2<c1≤100

输出格式

在第一行输出一个正整数nn,代表赢得战斗需要的最少回合数。

接下来输出nn行。第ii行可以是代表你在这回合中喝了一瓶生命药剂的“HEAL”“HEAL”,也可以是代表你在这回合中攻击了BossBoss的“STRIKE”“STRIKE”。

必胜策略必须满足以下条件:即在你进行最后的操作后BossBoss的生命值必须小于等于00。

样例 #1

样例输入 #1

10 6 100
17 5

样例输出 #1

4
STRIKE
HEAL
STRIKE
STRIKE

样例 #2

样例输入 #2

11 6 100
12 5

样例输出 #2

2
STRIKE
STRIKE

 我的代码

#include "bits/stdc++.h" using namespace std; long long a1, a2, a3, b1, b2, num, a11, a21, a31, b11, b21;

int main() {

cin >> a1 >> a2 >> a3 >> b1 >> b2;
a11 = a1, a21 = a2, a31 = a3, b11 = b1, b21 = b2;
while (b11 > 0) {
	if (a11 <= b21) {
		a11 += a31;
	} else {
		a11 -= b21;
		b11 -= a21;
	}
	num++;
}
cout << num << endl;
while (b1 > 0) {
	if (a2 >= b1) {
		cout << "STRIKE" << endl;
		break;
	}
	if (a1 <= b2) {
		cout << "HEAL" << endl;
		a1 += a3;
	} else {
		cout << "STRIKE" << endl;
		a1 -= b2;
		b1 -= a2;
	}
	num++;
}
return 0;

}

阳历明明过了诶
2024/8/9 10:59
加载中...