結果

問題 No.966 引き算をして門松列(その1)
ユーザー lam6er
提出日時 2025-03-20 20:33:41
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 2,724 bytes
コンパイル時間 149 ms
コンパイル使用メモリ 82,788 KB
実行使用メモリ 80,780 KB
最終ジャッジ日時 2025-03-20 20:35:06
合計ジャッジ時間 1,298 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 1 WA * 4
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys

def pattern1(A, B, C):
    a = 0
    A_prime = A - a
    if A_prime <= 0:
        return float('inf')
    C_prime_max = min(C, A_prime - 1)
    if C_prime_max <= 0:
        return float('inf')
    B_prime_max = min(B - 1, C_prime_max - 1)
    if B_prime_max <= 0:
        return float('inf')
    if A_prime > C_prime_max and C_prime_max > B_prime_max:
        cost = (B - B_prime_max) + (C - C_prime_max) + a
        return cost
    return float('inf')

def pattern2(A, B, C):
    c = 0
    C_prime = C - c
    if C_prime <= 0:
        return float('inf')
    A_prime_max = min(A, C_prime - 1)
    if A_prime_max <= 0:
        return float('inf')
    B_prime_max = min(B - 1, A_prime_max - 1)
    if B_prime_max <= 0:
        return float('inf')
    if C_prime > A_prime_max and A_prime_max > B_prime_max:
        cost = (B - B_prime_max) + (A - A_prime_max) + c
        return cost
    return float('inf')

def pattern4(B_prime_base, C_prime_base, A_prime_base):
    b = 0
    B_prime = B_prime_base - b
    if B_prime <= 0:
        return float('inf')
    C_prime_max = min(C_prime_base, B_prime - 1)
    if C_prime_max <= 0:
        return float('inf')
    A_prime_max = min(A_prime_base, C_prime_max - 1)
    if A_prime_max <= 0:
        return float('inf')
    if B_prime > C_prime_max and C_prime_max > A_prime_max:
        cost = (A_prime_base - A_prime_max) + (C_prime_base - C_prime_max) + b
        return cost
    return float('inf')

def pattern5(B_prime_base, A_prime_base, C_prime_base):
    b = 0
    B_prime = B_prime_base - b
    if B_prime <= 0:
        return float('inf')
    A_prime_max = min(A_prime_base, B_prime - 1)
    if A_prime_max <= 0:
        return float('inf')
    C_prime_max = min(C_prime_base, A_prime_max - 1)
    if C_prime_max <= 0:
        return float('inf')
    if B_prime > A_prime_max and A_prime_max > C_prime_max:
        cost = (C_prime_base - C_prime_max) + (A_prime_base - A_prime_max) + b
        return cost
    return float('inf')

def compute_min_cost(A, B, C):
    min_cost = float('inf')
    cost = pattern1(A, B, C)
    if cost < min_cost:
        min_cost = cost
    cost = pattern2(A, B, C)
    if cost < min_cost:
        min_cost = cost
    cost = pattern4(B, C, A)
    if cost < min_cost:
        min_cost = cost
    cost = pattern5(B, A, C)
    if cost < min_cost:
        min_cost = cost
    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])
        idx +=3
        print(compute_min_cost(A, B, C))

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