熱門文章

2026年2月18日 星期三

ZeroJudge 解題筆記:c081. 00102 - Ecological Bin Packing

作者:王一哲
日期:2026年2月18日


ZeroJudge 題目連結:c081. 00102 - Ecological Bin Packing

解題想法


只有 6 種排列方式,分別為 BCG, BGC, CBG, CGB, GBC, GCB,依照這個順序分別計算對應的移動數量,取第一個移動數量最小值。

Python 程式碼


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

for line in sys.stdin:
    b1, g1, c1, b2, g2, c2, b3, g3, c3 = map(int, line.split())
    # 測試的排列順序為 BCG, BGC, CBG, CGB, GBC, GCB
    ans, imin = "", 1E9
    cnt1 = g1+c1+b2+g2+b3+c3
    if cnt1 < imin:
        ans = "BCG"; imin = cnt1
    cnt2 = g1+c1+b2+c2+b3+g3
    if cnt2 < imin:
        ans = "BGC"; imin = cnt2
    cnt3 = b1+g1+g2+c2+b3+c3
    if cnt3 < imin:
        ans = "CBG"; imin = cnt3
    cnt4 = b1+g1+b2+c2+g3+c3
    if cnt4 < imin:
        ans = "CGB"; imin = cnt4
    cnt5 = b1+c1+g2+c2+b3+g3
    if cnt5 < imin:
        ans = "GBC"; imin = cnt5
    cnt6 = b1+c1+b2+g2+g3+c3
    if cnt6 < imin:
        ans = "GCB"; imin = cnt6
    print(ans, imin)

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

for line in sys.stdin:
    b1, g1, c1, b2, g2, c2, b3, g3, c3 = map(int, line.split())
    # BCG
    cnt1 = g1+c1+b2+g2+b3+c3
    # BGC
    cnt2 = g1+c1+b2+c2+b3+g3
    # CBG
    cnt3 = b1+g1+g2+c2+b3+c3
    # CGB
    cnt4 = b1+g1+b2+c2+g3+c3
    # GBC
    cnt5 = b1+c1+g2+c2+b3+g3 
    # GCB
    cnt6 = b1+c1+b2+g2+g3+c3
    ans = sorted([(cnt1, "BCG"), (cnt2, "BGC"), (cnt3, "CBG"), (cnt4, "CGB"), (cnt5, "GBC"), (cnt6, "GCB")])
    print(ans[0][1], ans[0][0])


C++ 程式碼


使用時間約為 1 ms,記憶體約為 324 kB,通過測試。
#include <iostream>
#include <string>
using namespace std;

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int b1, g1, c1, b2, g2, c2, b3, g3, c3;
    while(cin >> b1 >> g1 >> c1 >> b2 >> g2 >> c2 >> b3 >> g3 >> c3) {
        // 測試的排列順序為 BCG, BGC, CBG, CGB, GBC, GCB
        string ans = "";
        int imin = 1000000000;
        int cnt1 = g1+c1+b2+g2+b3+c3;
        if (cnt1 < imin) {
            ans = "BCG"; imin = cnt1;
        }
        int cnt2 = g1+c1+b2+c2+b3+g3;
        if (cnt2 < imin) {
            ans = "BGC"; imin = cnt2;
        }
        int cnt3 = b1+g1+g2+c2+b3+c3;
        if (cnt3 < imin) {
            ans = "CBG"; imin = cnt3;
        }
        int cnt4 = b1+g1+b2+c2+g3+c3;
        if (cnt4 < imin) {
            ans = "CGB"; imin = cnt4;
        }
        int cnt5 = b1+c1+g2+c2+b3+g3;
        if (cnt5 < imin) {
            ans = "GBC"; imin = cnt5;
        }
        int cnt6 = b1+c1+b2+g2+g3+c3;
        if (cnt6 < imin) {
            ans = "GCB"; imin = cnt6;
        }
        cout << ans << " " << imin << "\n";
    }
    return 0;
}


沒有留言:

張貼留言