結果

問題 No.968 引き算をして門松列(その3)
ユーザー lam6er
提出日時 2025-04-15 21:56:43
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 5,691 bytes
コンパイル時間 218 ms
コンパイル使用メモリ 82,380 KB
実行使用メモリ 83,628 KB
最終ジャッジ日時 2025-04-15 21:58:09
合計ジャッジ時間 2,664 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other WA * 10
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys

def compute_min_cost(A, B, C, X, Y, Z):
    min_cost = float('inf')
    
    # Case 1: b > a > c
    def case1():
        nonlocal min_cost
        # Candidate 1: k1=0, k2 as small as possible
        k2_min = max(0, B - A - 1)
        k3 = k2_min + (A - B) + 1
        if k3 < 0:
            return
        a = A - 0 - k3
        b = B - 0 - k2_min
        c = C - k2_min - k3
        if b > a and a > c and a >= 1 and b >= 1 and c >= 1:
            if k2_min >= (C - A + 1):
                cost = 0 * X + k2_min * Y + k3 * Z
                if cost < min_cost:
                    min_cost = cost
        # Candidate 2: k2=0
        k2 = 0
        k3_min = max(0, (A - B) + 1 + k2)
        k3 = k3_min
        a = A - 0 - k3
        b = B - 0 - k2
        c = C - k2 - k3
        if b > a and a > c and a >= 1 and b >= 1 and c >= 1:
            cost = 0 * X + 0 * Y + k3 * Z
            if cost < min_cost:
                min_cost = cost
        # Candidate 3: k3=0
        k3 = 0
        k2_min_case3 = max(0, (B - A) - 1)
        k2 = k2_min_case3
        a = A - 0 - k3
        b = B - 0 - k2
        c = C - k2 - k3
        if b > a and a > c and a >= 1 and b >= 1 and c >= 1:
            cost = 0 * X + k2 * Y + 0 * Z
            if cost < min_cost:
                min_cost = cost
    
    # Case 2: c > a > b
    def case2():
        nonlocal min_cost
        # Candidate 1: k1=0, k3 as small as possible
        k3_min = max(0, C - A - 1)
        k2 = k3_min + (A - C) + 1
        if k2 < 0:
            return
        a = A - 0 - k3_min
        c = C - 0 - k2
        b = B - 0 - k2
        if c > a and a > b and a >= 1 and b >= 1 and c >= 1:
            if k3_min >= (B - A + 1):
                cost = 0 * X + k2 * Y + k3_min * Z
                if cost < min_cost:
                    min_cost = cost
        # Candidate 2: k3=0
        k3 = 0
        k2_min_case2 = max(0, (C - A) + 1)
        k2 = k2_min_case2
        a = A - 0 - k3
        c = C - 0 - k2
        b = B - 0 - k2
        if c > a and a > b and a >= 1 and b >= 1 and c >= 1:
            cost = 0 * X + k2 * Y + 0 * Z
            if cost < min_cost:
                min_cost = cost
        # Candidate 3: k2=0
        k2 = 0
        k3_min = max(0, (C - A) - 1)
        a = A - 0 - k3_min
        c = C - 0 - k2
        b = B - 0 - k2
        if c > a and a > b and a >= 1 and b >= 1 and c >= 1:
            cost = 0 * X + 0 * Y + k3_min * Z
            if cost < min_cost:
                min_cost = cost
    
    # Case 3: b > c > a
    def case3():
        nonlocal min_cost
        # Candidate 1: k3=0, k2 as small as possible
        k2_min = max(0, B - C - 1)
        k1 = k2_min + (C - B) + 1
        if k1 < 0:
            return
        c_val = C - k2_min - 0
        b_val = B - k1 - k2_min
        a_val = A - k1 - 0
        if b_val > c_val and c_val > a_val and a_val >= 1 and b_val >= 1 and c_val >= 1:
            if k2_min >= (A - C + 1):
                cost = k1 * X + k2_min * Y + 0 * Z
                if cost < min_cost:
                    min_cost = cost
        # Candidate 2: k2=0
        k2 = 0
        k1_min = max(0, (B - C) - 1)
        k1 = k1_min
        c_val = C - k2 - 0
        b_val = B - k1 - k2
        a_val = A - k1 - 0
        if b_val > c_val and c_val > a_val and a_val >= 1 and b_val >= 1 and c_val >= 1:
            cost = k1 * X + 0 * Y + 0 * Z
            if cost < min_cost:
                min_cost = cost
        # Candidate 3: k1=0
        k1 = 0
        k2_min_case3 = max(0, B - C - 1)
        c_val = C - k2_min_case3 - 0
        b_val = B - k1 - k2_min_case3
        a_val = A - k1 - 0
        if b_val > c_val and c_val > a_val and a_val >= 1 and b_val >= 1 and c_val >= 1:
            cost = 0 * X + k2_min_case3 * Y + 0 * Z
            if cost < min_cost:
                min_cost = cost
    
    # Case 4: a > c > b
    def case4():
        nonlocal min_cost
        # Candidate 1: k2=0, k1 as small as possible
        k1_min = max(0, A - C - 1)
        k3 = k1_min + (C - A) + 1
        if k3 < 0:
            return
        a_val = A - k1_min - k3
        c_val = C - 0 - k3
        b_val = B - k1_min - 0
        if a_val > c_val and c_val > b_val and a_val >= 1 and b_val >= 1 and c_val >= 1:
            if k1_min >= (B - C + 1):
                cost = k1_min * X + 0 * Y + k3 * Z
                if cost < min_cost:
                    min_cost = cost
        # Candidate 2: k1=0
        k1 = 0
        k3_min = max(0, (C - A) + 1)
        a_val = A - k1 - k3_min
        c_val = C - 0 - k3_min
        b_val = B - k1 - 0
        if a_val > c_val and c_val > b_val and a_val >= 1 and b_val >= 1 and c_val >= 1:
            cost = 0 * X + 0 * Y + k3_min * Z
            if cost < min_cost:
                min_cost = cost
        # Candidate 3: k3=0
        k3 = 0
        k1_min_case4 = max(0, A - C - 1)
        a_val = A - k1_min_case4 - k3
        c_val = C - 0 - k3
        b_val = B - k1_min_case4 - 0
        if a_val > c_val and c_val > b_val and a_val >= 1 and b_val >= 1 and c_val >= 1:
            cost = k1_min_case4 * X + 0 * Y + 0 * Z
            if cost < min_cost:
                min_cost = cost
    
    case1()
    case2()
    case3()
    case4()
    
    return min_cost if min_cost != float('inf') else -1

def main():
    input = sys.stdin.read().split()
    idx = 0
    T = int(input[idx])
    idx +=1
    for _ in range(T):
        A = int(input[idx])
        B = int(input[idx+1])
        C = int(input[idx+2])
        X = int(input[idx+3])
        Y = int(input[idx+4])
        Z = int(input[idx+5])
        idx +=6
        print(compute_min_cost(A, B, C, X, Y, Z))

if __name__ == '__main__':
    main()
0