熱門文章

2025年4月13日 星期日

ZeroJudge 解題筆記:j180. 戰備存糧 (Food)

作者:王一哲
日期: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;       
}


沒有留言:

張貼留言