#include <iostream>
using namespace std;
int minRound(int hp, int n, int b) {
int ans = 0, div;
while (hp > 0) {
// 2 * na < ba 且 hp > na 时,选 ba 更优
if (2 * n < b && hp > n) {
if (hp % b <= n) div = hp / b; // hp 整除 b 的余数 <= na 时,最后 na 一次即可
else div = (hp + b - 1) / b; // 否则,还是选择聚力再 ba
ans += 2 * div;
hp -= b * div;
}
// 其他情况选 na 更优
else {
div = (hp + n - 1) / n;
ans += div;
hp -= n * div;
}
}
return ans;
}
int main() {
int hp, normalAttack, buffAttack;
cin >> hp >> normalAttack >> buffAttack;
cout << minRound(hp, normalAttack, buffAttack);
}
// 64 位输出请用 printf("%lld")
贪心,照着样例调了挺久的,一开始想的是一个一个减,然后有一个样例超时了,然后优化成一次减去整除的商的次数的伤害

京公网安备 11010502036488号