結果
| 問題 |
No.968 引き算をして門松列(その3)
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 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()
lam6er