P1095 守望者的逃离
题目大意
守望者的可以在一秒逃出 $17 {\rm m}$,或者消耗 $10$ 点魔法值闪现 $60 {\rm m}$。原地休息时每秒回复 $4$ 点魔法值。
守望者开始有 $M$ 点魔法,需要在 $T$ 秒内逃离距离 $S$。若能逃离则求最短逃离时间,否则求最远距离。
分析
设 $s_1$为一直走路,$s_2$ 为一直闪现恢复。当 $s_2$ 快了就把 $s_1$ 更新为 $s_2$。
int main() {
int m = rr(), s = rr(), t = rr();
int time = t, s1 = 0, s2 = 0;
while (time > 0 && s1 < s) {
s1 += 17;
if (m >= 10)
m -= 10, s2 += 60;
else
m += 4;
s1 = max(s1, s2);
time--;
}
if (s1 < s)
printf("No\n%d\n", s1);
else
printf("Yes\n%d\n", t - time);
return 0;
}