結果
問題 |
No.968 引き算をして門松列(その3)
|
ユーザー |
![]() |
提出日時 | 2025-04-16 16:22:11 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 4,084 bytes |
コンパイル時間 | 258 ms |
コンパイル使用メモリ | 81,960 KB |
実行使用メモリ | 83,276 KB |
最終ジャッジ日時 | 2025-04-16 16:23:24 |
合計ジャッジ時間 | 2,624 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | WA * 10 |
ソースコード
import sys def is_kadomatsu(A, B, C): if A == B or B == C or A == C: return False if (B > A and B > C) or (B < A and B < C): return True return False def case_a(A, B, C, Z): if A == C: return float('inf') c_min = max(A - B + 1, C - B + 1, 0) if c_min >= min(A, C): return float('inf') if B <= A - c_min or B <= C - c_min: return float('inf') if (A - c_min) <= 0 or (C - c_min) <= 0: return float('inf') return c_min * Z def case_b(A, B, C, Y): if B <= C: return float('inf') max_b = min(B - A - 1, B - 1, C - 1) if max_b < 0: return float('inf') if A != C: b = 0 if B - b > A and C - b > 0: return 0 * Y else: if B > A and C > 0: return 0 * Y b_min = 1 if b_min > max_b: return float('inf') if B - b_min > A and C - b_min > 0: return b_min * Y else: return float('inf') else: b_min = 1 if b_min > max_b: return float('inf') if B - b_min > A and C - b_min > 0: return b_min * Y else: return float('inf') def case_c(A, B, C, X): if B <= A or B <= C: return float('inf') max_a = min(B - C - 1, A - 1, B - 1) if max_a < 0: return float('inf') a_min = 0 if A - a_min == C: a_min = 1 if a_min > max_a: return float('inf') if a_min > max_a: return float('inf') if (B - a_min > C) and (A - a_min > 0): return a_min * X else: return float('inf') def case_d(A, B, C, X): if B >= A or B >= C: return float('inf') min_a = max(B - C + 1, 0) max_a = min(A - 1, B - 1) if min_a > max_a: return float('inf') a_min = min_a if a_min == (A - C): a_min += 1 if a_min > max_a: return float('inf') if a_min > max_a: return float('inf') if (B - a_min < A - a_min) and (B - a_min < C) and (A - a_min != C): return a_min * X else: return float('inf') def case_e(A, B, C, Y): if B >= C: return float('inf') max_b = min(C - B - 1, B - 1) if max_b < 0: return float('inf') b_min = 0 if A == C - b_min: b_min = 1 if b_min > max_b: return float('inf') if b_min > max_b: return float('inf') if (B - b_min < A) and (C - b_min > 0) and (A != C - b_min): return b_min * Y else: return float('inf') def case_f(A, B, C, Z): if A == C: return float('inf') c_min = max(B - A + 1, B - C + 1, 0) if c_min >= min(A, C): return float('inf') if (A - c_min) <= B or (C - c_min) <= B: return float('inf') if (A - c_min) <= 0 or (C - c_min) <= 0: return float('inf') return c_min * Z def solve(): 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]) X = int(input[idx+3]) Y = int(input[idx+4]) Z = int(input[idx+5]) idx +=6 if is_kadomatsu(A, B, C): print(0) continue costs = [] cost_a = case_a(A, B, C, Z) costs.append(cost_a) cost_b = case_b(A, B, C, Y) costs.append(cost_b) cost_c = case_c(A, B, C, X) costs.append(cost_c) cost_d = case_d(A, B, C, X) costs.append(cost_d) cost_e = case_e(A, B, C, Y) costs.append(cost_e) cost_f = case_f(A, B, C, Z) costs.append(cost_f) min_cost = float('inf') for c in costs: if c < min_cost: min_cost = c if min_cost == float('inf'): print(-1) else: print(min_cost) if __name__ == '__main__': solve()