結果
| 問題 |
No.968 引き算をして門松列(その3)
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-16 15:38:59 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 5,691 bytes |
| コンパイル時間 | 208 ms |
| コンパイル使用メモリ | 81,928 KB |
| 実行使用メモリ | 83,516 KB |
| 最終ジャッジ日時 | 2025-04-16 15:44:17 |
| 合計ジャッジ時間 | 2,525 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | WA * 10 |
ソースコード
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()
lam6er