这题。。。。得考虑一些奇奇怪怪的复杂情况
不过也有简便方法。
枚举时间,先算出来只用魔法走的时间。
然后再枚举一遍时间,再算只走的时间,两个比较一下,取最游值。
代码
#include <cstdio> #include <cstring> #include <iostream> #define N 3000001 int m, s, t; int f[N]; inline int read() { int x = 0, f = 1; char ch = getchar(); for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1; for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0'; return x * f; } int main() { int i, j; m = read(); s = read(); t = read(); for(i = 1; i <= t; i++) if(m > 9) f[i] = f[i - 1] + 60, m -= 10; else f[i] = f[i - 1], m += 4; for(i = 1; i <= t; i++) { if(f[i] < f[i - 1] + 17) f[i] = f[i - 1] + 17; if(f[i] >= s) { printf("Yes %d ", i); return 0; } } printf("No %d ", f[t]); return 0; }