結果

問題 No.966 引き算をして門松列(その1)
ユーザー lam6er
提出日時 2025-03-31 17:44:05
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 110 ms / 2,000 ms
コード長 2,071 bytes
コンパイル時間 178 ms
コンパイル使用メモリ 82,092 KB
実行使用メモリ 80,168 KB
最終ジャッジ日時 2025-03-31 17:45:06
合計ジャッジ時間 1,198 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 5
権限があれば一括ダウンロードができます

ソースコード

diff #

def compute_case_a(A, B, C):
    a_prime = A
    c_prime = min(C, a_prime - 1)
    if c_prime < 1:
        return None
    b_prime = min(B, c_prime - 1)
    if b_prime < 1:
        return None
    if a_prime > c_prime and c_prime > b_prime:
        cost = (A - a_prime) + (C - c_prime) + (B - b_prime)
        return cost
    return None

def compute_case_b(A, B, C):
    c_prime = C
    a_prime = min(A, c_prime - 1)
    if a_prime < 1:
        return None
    b_prime = min(B, a_prime - 1)
    if b_prime < 1:
        return None
    if c_prime > a_prime and a_prime > b_prime:
        cost = (A - a_prime) + (B - b_prime) + (C - c_prime)
        return cost
    return None

def compute_case_c(A, B, C):
    b_prime = B
    a_prime = min(A, b_prime - 1)
    if a_prime < 1:
        return None
    c_prime = min(C, a_prime - 1)
    if c_prime < 1:
        return None
    if b_prime > a_prime and a_prime > c_prime:
        cost = (A - a_prime) + (B - b_prime) + (C - c_prime)
        return cost
    return None

def compute_case_d(A, B, C):
    b_prime = B
    c_prime = min(C, b_prime - 1)
    if c_prime < 1:
        return None
    a_prime = min(A, c_prime - 1)
    if a_prime < 1:
        return None
    if b_prime > c_prime and c_prime > a_prime:
        cost = (A - a_prime) + (B - b_prime) + (C - c_prime)
        return cost
    return None

def solve():
    import sys
    input = sys.stdin.read().split()
    T = int(input[0])
    idx = 1
    for _ in range(T):
        A = int(input[idx])
        B = int(input[idx+1])
        C = int(input[idx+2])
        idx += 3
        
        candidates = []
        # Compute for all four cases
        for case_func in [compute_case_a, compute_case_b, compute_case_c, compute_case_d]:
            cost = case_func(A, B, C)
            if cost is not None:
                candidates.append(cost)
        
        # If there are valid candidates, choose the minimum; else, -1
        if not candidates:
            print(-1)
        else:
            print(min(candidates))

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