結果
問題 |
No.463 魔法使いのすごろく🎲
|
ユーザー |
![]() |
提出日時 | 2025-03-20 20:26:52 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 2,190 bytes |
コンパイル時間 | 172 ms |
コンパイル使用メモリ | 82,712 KB |
実行使用メモリ | 77,188 KB |
最終ジャッジ日時 | 2025-03-20 20:28:28 |
合計ジャッジ時間 | 7,227 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 35 RE * 1 |
ソースコード
def compute_next_pos(i, k, n): current = i direction = 1 steps_left = k while steps_left > 0: next_p = current + direction if next_p > n: direction = -1 next_p = current + direction current = next_p steps_left -= 1 return current n, m = map(int, input().split()) c = list(map(int, input().split())) c = [0] + [0] + c + [0] # indexes from 0 to n+1, but ignore 0 and adjust for 1-based # Initialize next_pos: next_pos[i][k] for 1 <= i <=n, 1 <=k <=m next_pos = [[0] * (m+1) for _ in range(n+2)] # [1..n][1..m] for i in range(1, n+1): for k in range(1, m+1): next_pos[i][k] = compute_next_pos(i, k, n) # DP tables: E0 is E[i][0], E1 is E[i][1] E0 = [0.0] * (n + 2) E1 = [0.0] * (n + 2) iterations = 0 epsilon = 1e-14 max_diff = 1.0 # Iterate until convergence while max_diff > epsilon: new_E0 = [0.0] * (n + 2) new_E1 = [0.0] * (n + 2) max_diff = 0.0 for i in range(1, n + 1): if i == n: new_E0[i] = 0.0 new_E1[i] = 0.0 continue # Compute new_E0[i]: u=0 c_i = c[i] if (2 <= i < n) else 0.0 # Option 1: No magic sum_no_magic = 0.0 for k in range(1, m+1): j = next_pos[i][k] sum_no_magic += E0[j] sum_no_magic /= m # Option 2: Use magic, choose best k sum_magic = float('inf') for k in range(1, m+1): j = next_pos[i][k] current_e = E1[j] if current_e < sum_magic: sum_magic = current_e new_E0_i = c_i + min(sum_no_magic, sum_magic) # Compute new_E1[i]: u=1 sum_e1 = 0.0 for k in range(1, m+1): j = next_pos[i][k] sum_e1 += E1[j] sum_e1 /= m new_E1_i = c_i + sum_e1 new_E0[i] = new_E0_i new_E1[i] = new_E1_i # Update max_diff for i in range(1, n + 1): diff0 = abs(new_E0[i] - E0[i]) diff1 = abs(new_E1[i] - E1[i]) max_diff = max(max_diff, diff0, diff1) # Update E0 and E1 E0, new_E0 = new_E0, E0 E1, new_E1 = new_E1, E1 print("{0:.10f}".format(E0[1]))