日期:2026年2月4日
ZeroJudge 題目連結:c036. 00573 - The Snail
解題想法
用 $y$ 儲存目前的高度,預設值為 0。用一個無窮迴圈,不斷更新每天的高度,更新的順序為
- 白天往上爬高度 $u$,如果 $y > h$ 印出 success on day {days},中止迴圈。
- 晚上向下滑高度 $d$,如果 $y < 0$ 印出 failure on day {days},中止迴圈。
- 更新下一天向上爬的高度 $u$,如果 $u < 0$ 時歸零。
Python 程式碼
使用時間約為 18 ms,記憶體約為 3.3 MB,通過測試。
import sys
for line in sys.stdin:
if line.rstrip() == "0 0 0 0": break
h, u, d, f = map(float, line.split())
days = 0
dec = u*f*0.01
y = 0.0
while True:
days += 1
y += u
if y > h:
print(f"success on day {days:d}")
break
y -= d
if y < 0:
print(f"failure on day {days:d}")
break
u -= dec
if u < 0: u = 0.0
C++ 程式碼
使用時間約為 2 ms,記憶體約為 88 kB,通過測試。
#include <cstdio>
int main() {
int hi, ui, di, fi;
float h, u, d, f;
while(scanf("%d %d %d %d", &hi, &ui, &di, &fi) != EOF) {
if (hi == 0 && ui == 0 && di == 0 && fi == 0) break;
h = (float)hi; u = (float)ui; d = (float)di; f = (float)fi;
int days = 0;
float dec = u*f*0.01, y = 0.0;
while(true) {
days++; y += u;
if (y > h) {
printf("success on day %d\n", days);
break;
}
y -= d;
if (y < 0) {
printf("failure on day %d\n", days);
break;
}
u -= dec;
if (u < 0) u = 0.0;
}
}
return 0;
}
沒有留言:
張貼留言