結果
| 問題 |
No.463 魔法使いのすごろく🎲
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-15 22:55:54 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,565 bytes |
| コンパイル時間 | 193 ms |
| コンパイル使用メモリ | 82,404 KB |
| 実行使用メモリ | 66,692 KB |
| 最終ジャッジ日時 | 2025-04-15 22:57:37 |
| 合計ジャッジ時間 | 2,563 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 3 |
| other | WA * 35 RE * 1 |
ソースコード
n, m = map(int, input().split())
c = list(map(int, input().split()))
cost = [0] * (n + 1)
for i in range(2, n):
cost[i] = c[i - 2]
def next_pos(i, d):
j = i + d
if j > n:
j = 2 * n - j
return j
INF = float('inf')
dp = [[INF] * 2 for _ in range(n + 1)]
dp[n][0] = 0.0
dp[n][1] = 0.0
EPS = 1e-12
MAX_ITER = 1000000
for _ in range(MAX_ITER):
updated = False
for i in range(n-1, 0, -1):
for k in [1, 0]:
if i == n:
continue
if dp[i][k] == INF:
continue
old_val = dp[i][k]
new_val = 0.0
if k == 1:
magic_min = INF
for d in range(1, m + 1):
j = next_pos(i, d)
current_cost = cost[j] + dp[j][0]
if current_cost < magic_min:
magic_min = current_cost
exp_no_magic = 0.0
for d in range(1, m + 1):
j = next_pos(i, d)
exp_no_magic += (cost[j] + dp[j][1])
exp_no_magic /= m
new_val = min(magic_min, exp_no_magic)
else:
exp = 0.0
for d in range(1, m + 1):
j = next_pos(i, d)
exp += (cost[j] + dp[j][0])
exp /= m
new_val = exp
if abs(new_val - old_val) > EPS:
updated = True
dp[i][k] = new_val
if not updated:
break
print("{0:.10f}".format(dp[1][1]))
lam6er