日期:2025年4月13日
ZeroJudge 題目連結:j180. 戰備存糧 (Food)
解題想法
這題如果按照題目的敘述,先將每個倉庫的存糧減 1,再將後方倉庫的存糧往前塞,這樣會跑很慢,一定無法通過測試。既然題目要將存糧盡量往前塞,那就乾脆計算存糧的數量,如果能用更少的倉庫裝下存糧,那就減一個倉庫。
Python 程式碼
使用時間約為 0.2 s,記憶體約為 3.3 MB,通過測試。
while True:
line = input().strip()
if line == "-1": break
n, e = map(int, line.split())
tot = n*e # 存糧總量
day = 0 # 天數
while tot > 0: # 還有存糧
day += 1 # 天數加 1
tot -= n # 存糧減 n
while tot <= (n-1)*e: # 如果剩下的存糧可以用 (n-1) 個倉庫裝下
n -= 1 # 減 1 個倉庫
print(day)
C++ 程式碼
使用時間約為 2 ms,記憶體約為 92 kB,通過測試。
#include <cstdio>
using namespace std;
int main() {
int n, e; // 倉庫數量,每個倉庫的容量
while(scanf("%d", &n) != EOF) {
if (n == -1) break;
scanf("%d", &e);
int tot = n*e, day = 0; // 存糧總量,天數
while(tot > 0) { // 還有存糧
day++; // 天數加 1
tot -= n; // 存糧減 n
while(tot <= (n-1)*e) n--; // 如果剩下的存糧可以用 (n-1) 個倉庫裝下,減 1 個倉庫
}
printf("%d\n", day);
}
return 0;
}
沒有留言:
張貼留言