日期:2025年5月19日
ZeroJudge 題目連結:l918. P1. 彈珠汽水 (Soda)
解題想法
這題有一個陷阱,如果 $N = 1$,每喝一瓶汽水就可以再換一瓶新的汽水,如果寫 while 迴圈的條件時只考慮是否還有沒喝的汽水,這樣會變成無窮迴圈。
Python 程式碼
使用時間約為 38 ms,記憶體約為 3.3 MB,通過測試。
m, n, k = map(int, input().split()) # m 瓶彈珠汽水,n 個瓶子再換一瓶汽水,想要喝到 k 瓶
t, b = 0, 0 # 總瓶數,空瓶數
while m > 0 and t < k: # 如果還有沒喝的汽水而且還沒有喝到想要的瓶數
t += m; b += m # 更新 t, b,加上 m
m = b//n # 用空瓶換汽水
b %= n # 剩下的空瓶
print("YES" if t >= k else "NO") # 依照 t 是否大於等於 k 印出答案
C++ 程式碼
使用時間約為 2 ms,記憶體約為 84 kB,通過測試。
#include <cstdio>
using namespace std;
int main() {
int m, n, k; scanf("%d %d %d", &m, &n, &k); // m 瓶彈珠汽水,n 個瓶子再換一瓶汽水,想要喝到 k 瓶
int t = 0, b = 0; // 總瓶數,空瓶數
while(m > 0 && t < k) { // 如果還有沒喝的汽水而且還沒有喝到想要的瓶數
t += m; b += m; // 更新 t, b,加上 m
m = b/n; // 用空瓶換汽水
b %= n; // 剩下的空瓶
}
printf(t >= k ? "YES\n" : "NO\n"); // 依照 t 是否大於等於 k 印出答案
return 0;
}
沒有留言:
張貼留言