题目``
你在游戏里扮演的角色收到了一个任务:去干掉大Boss。Boss有h2点生命值和a2点攻击力。你不想死那么多回,于是就去商店氪了一大堆强力生命回复药剂来准备战斗。
你的角色有h1点初始生命和a1点攻击力。还有无限多的强力生命回复药剂,每一瓶都可以给你回复c1点血。每一瓶药剂都是完全一样的,数据保证c1>a2。
战斗包含多个回合。在你的回合中,既可以攻击Boss(可以将它的生命值减少a1),也可以喝下一瓶药剂(可将你的生命值增加c1,你的生命值可以超过 h1)。而如果你和Boss都没有死的话,Boss就会攻击你,将你的生命值减少a2。战斗会在任意一方死亡后结束。
现在你想知道用最短时间获胜的策略,假设你有无数瓶药水,数据保证你总能赢。
输入第一行,包含三个空格隔开的正整数h1,a1,c1,分别代表你的初始生命值,攻击力和一瓶强效生命药剂能回复的生命值。
输入第二行,包含两个空格隔开的正整数h2,a2,分别代表Boss的生命值和攻击力。
1≤h1,h2,a1≤100,2≤a2<c1≤100
在第一行输出一个正整数n,代表赢得战斗需要的最少回合数。
接下来输出n行。第i行可以是代表你在这回合中喝了一瓶生命药剂的“HEAL”,也可以是代表你在这回合中攻击了Boss的“STRIKE”。
必胜策略必须满足以下条件:即在你进行最后的操作后Boss的生命值必须小于等于0。
10 6 100
17 5
4
STRIKE
HEAL
STRIKE
STRIKE
11 6 100
12 5
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;
}
阳历明明过了诶