P13164 [GCJ 2017 #1A] Play the Dragon
题目描述
你是一条友善的龙,正在与一名贪婪的骑士战斗,以保护你的巢穴!你拥有 $H_d$ 点生命值和 $A_d$ 点攻击力,骑士拥有 $H_k$ 点生命值和 $A_k$ 点攻击力。如果你的生命值在任何时刻降至 $0$ 或以下,你会被击倒并立即失败;如果骑士的生命值在任何时刻降至 $0$ 或以下,骑士会被击倒,你获得胜利!
你将与骑士进行一系列回合的战斗。在每个回合中,你先行动,可以选择并执行以下任意一个动作:
- 攻击(Attack):使对方的生命值减少你当前的攻击力。
- 增益(Buff):你的攻击力永久增加 $B$。
- 治疗(Cure):你的生命值恢复为 $H_d$。
- 减益(Debuff):对方的攻击力永久减少 $D$。如果减益会使对方攻击力降至 $0$ 以下,则将其设为 $0$。
然后,如果你的动作后骑士的生命值仍大于 $0$,骑士会执行一次攻击动作。之后本回合结束。(注意,如果你在本回合击败了骑士,虽然骑士不会再行动,但该回合仍然计入总回合数。)
注意,增益和减益效果可以叠加;每次增益会额外增加 $B$ 攻击力,每次减益会额外减少 $D$ 攻击力。
你希望尽快击败骑士(如果可能的话),这样你就不会错过今晚村民们烤棉花糖的节日了。你能否判断出击败骑士所需的最少回合数,或者判断是否不可能击败骑士?
输入格式
输入的第一行包含一个整数 $T$,表示测试用例的数量。接下来有 $T$ 组测试用例。每组测试用例占一行,包含六个整数 $H_d$、$A_d$、$H_k$、$A_k$、$B$ 和 $D$,含义如上所述。
输出格式
对于每组测试用例,输出一行,格式为 `Case #x: y`,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是击败骑士所需的最少回合数,或者如果无法击败骑士则输出 `IMPOSSIBLE`。
说明/提示
**样例解释**
在第 1 组样例中,你有 11 点生命值和 5 点攻击力,骑士有 16 点生命值和 5 点攻击力。一种可能的最优行动顺序如下:
- 第 1 回合:攻击,将骑士生命值降至 11。骑士攻击你,你的生命值降至 6。
- 第 2 回合:攻击,将骑士生命值降至 6。骑士攻击你,你的生命值降至 1。
- 第 3 回合:治疗,生命值恢复到 11。骑士攻击你,你的生命值降至 6。(如果你本回合选择攻击,下回合骑士的攻击会让你失败。)
- 第 4 回合:攻击,将骑士生命值降至 1。骑士攻击你,你的生命值降至 1。
- 第 5 回合:攻击,将骑士生命值降至 -4。你立即获胜,骑士不会再攻击。
在第 2 组样例中,一种可能的最优行动顺序如下:
- 第 1 回合:增益,攻击力提升至 3。骑士攻击你,你的生命值降至 1。
- 第 2 回合:攻击,将骑士生命值降至 0。你立即获胜,骑士不会再攻击。
在第 3 组样例中,骑士只需两次攻击就能击败你,而你无法在足够快的时间内击败骑士。你可以通过每次攻击后都治疗来无限延长战斗,但实际上无法击败骑士。
在第 4 组样例中,一种可能的最优行动顺序为:攻击、减益、增益、攻击、攻击。
**数据范围**
$1 \leq T \leq 100$。
**小数据集(测试集 1 - 可见)**
- 时间限制:~~60~~ 15 秒。
- $1 \leq H_d \leq 100$。
- $1 \leq A_d \leq 100$。
- $1 \leq H_k \leq 100$。
- $1 \leq A_k \leq 100$。
- $0 \leq B \leq 100$。
- $0 \leq D \leq 100$。
**大数据集(测试集 2 - 隐藏)**
- 时间限制:~~240~~ 60 秒。
- $1 \leq H_d \leq 10^9$。
- $1 \leq A_d \leq 10^9$。
- $1 \leq H_k \leq 10^9$。
- $1 \leq A_k \leq 10^9$。
- $0 \leq B \leq 10^9$。
- $0 \leq D \leq 10^9$。
由 ChatGPT 4.1 翻译