熱門文章

2025年5月28日 星期三

ZeroJudge 解題筆記:m398. 超市排隊 (Supermarket)

作者:王一哲
日期:2025年5月28日



ZeroJudge 題目連結:m398. 超市排隊 (Supermarket)

解題想法


依序計算三個櫃枱所需時間,再更新最短時間即可。

Python 程式碼


使用時間約為 21 ms,記憶體約為 3.3 MB,通過測試。
import sys

for line in sys.stdin:
    abc = list(map(int, line.split()))  # 三個櫃枱的人數
    idx, imin = 0, float('inf')  # 櫃枱編號及所需最短時間
    for i, n in enumerate(abc, start=1):  # 依序讀取三個櫃枱的人數
        arr = list(map(int, input().split()))  # 每個顧客購買的商品數量
        t = 2 * (n - 1)  # 顧客前進所需時間
        for d in arr: t += 3*d # 依序讀取商品數量並更新時間
        if t < imin:  # 如果 t 小於 imin
            idx = i; imin = t  # 更新 idx 及 imin
    print(idx, imin)


C++ 程式碼


使用時間約為 2 ms,記憶體約為 92 kB,通過測試。
#include <cstdio>
using namespace std;

int main() {
    int abc[3];  // 三個櫃枱的人數
    while(scanf("%d", &abc[0]) != EOF) {
        scanf("%d %d", &abc[1], &abc[2]);
        int idx = 0, imin = 1E9;  // 櫃枱編號及所需最短時間
        for(int i=1; i<=3; i++) {  // 依序讀取三個櫃枱的人數
            int n = abc[i-1];  // 人數
            int t = 2*(n-1);  // 此櫃枱總時間,先加上顧客前進所需時間
            for(int j=0; j<n; j++) {
                int d; scanf("%d", &d);  // 商品數量
                t += 3*d;  // 更新時間
            }
            if (t < imin) {  // 如果 t 小於 imin
                idx = i; imin = t;  // 更新 idx 及 imin
            }
        }
        printf("%d %d\n", idx, imin);
    }
    return 0;
}


沒有留言:

張貼留言