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;
}