結果
| 問題 |
No.281 門松と魔法(1)
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-16 00:10:48 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,594 bytes |
| コンパイル時間 | 234 ms |
| コンパイル使用メモリ | 82,320 KB |
| 実行使用メモリ | 54,232 KB |
| 最終ジャッジ日時 | 2025-04-16 00:12:29 |
| 合計ジャッジ時間 | 3,722 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 55 WA * 2 |
ソースコード
d = int(input())
H = [int(input()) for _ in range(3)]
h1, h2, h3 = H
def solve_case1(d, h1, h2, h3):
min_steps = float('inf')
# Try up to 200 steps for k2
for k2 in range(200):
H2_prime = h2 - k2 * d
if H2_prime <= 0:
break
# Compute k1_min
target = H2_prime - 1
if h1 > target:
numerator = h1 - target
k1_min = (numerator + d - 1) // d
else:
k1_min = 0
H1_prime = max(0, h1 - k1_min * d)
# Compute k3_min
if h3 > target:
numerator = h3 - target
k3_min = (numerator + d - 1) // d
else:
k3_min = 0
H3_prime = max(0, h3 - k3_min * d)
# Check conditions
if H1_prime >= H2_prime or H3_prime >= H2_prime:
continue
if H1_prime != H3_prime:
current = k2 + k1_min + k3_min
if current < min_steps:
min_steps = current
else:
if H1_prime == 0:
continue
else:
current = k2 + k1_min + k3_min + 1
if current < min_steps:
min_steps = current
return min_steps if min_steps != float('inf') else -1
def solve_case2(d, h1, h2, h3):
min_steps = float('inf')
# Try up to 200 steps for k2
for k2 in range(200):
H2_prime = h2 - k2 * d
if H2_prime < 0:
H2_prime = 0
required = H2_prime + 1
if h1 < required or h3 < required:
continue
if h1 != h3:
current = k2
if current < min_steps:
min_steps = current
else:
# Check if we can apply one step to either
if (h1 - d) >= required:
current = k2 + 1
if current < min_steps:
min_steps = current
elif (h3 - d) >= required:
current = k2 + 1
if current < min_steps:
min_steps = current
return min_steps if min_steps != float('inf') else -1
if d == 0:
# Check if already valid
if h1 != h2 and h2 != h3 and h1 != h3:
if (h2 == max(H) or h2 == min(H)) and (h1 < h2 > h3 or h1 > h2 < h3):
print(0)
else:
print(-1)
else:
print(-1)
else:
case1 = solve_case1(d, h1, h2, h3)
case2 = solve_case2(d, h1, h2, h3)
res = []
if case1 != -1:
res.append(case1)
if case2 != -1:
res.append(case2)
if not res:
print(-1)
else:
print(min(res))
lam6er