結果
問題 | No.813 ユキちゃんの冒険 |
ユーザー |
![]() |
提出日時 | 2025-04-09 21:02:54 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,650 bytes |
コンパイル時間 | 249 ms |
コンパイル使用メモリ | 82,732 KB |
実行使用メモリ | 89,672 KB |
最終ジャッジ日時 | 2025-04-09 21:04:51 |
合計ジャッジ時間 | 5,619 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 25 TLE * 1 |
ソースコード
def main(): import sys input_lines = sys.stdin.read().splitlines() N = int(input_lines[0]) p = float(input_lines[1]) q = float(input_lines[2]) max_iterations = 1000000 epsilon = 1e-12 # Initialize previous arrays prev_r = [0.0] * (N + 2) # indexes 0..N+1, using 1..N prev_l = [0.0] * (N + 2) prev_r[1] = 1.0 # initial state: gate 1, right direction for _ in range(max_iterations): curr_r = [0.0] * (N + 2) curr_l = [0.0] * (N + 2) max_diff = 0.0 # Update current arrays for i in range(1, N + 1): # Handle curr_r[i] curr_r[i] = 0.0 if i == 1: curr_r[i] += 1.0 # initial condition if i > 1: curr_r[i] += q * prev_r[i-1] # from i-1, right (pass) curr_r[i] += p * prev_l[i-1] # from i-1, left (flee) # Handle curr_l[i] curr_l[i] = 0.0 if i < N: curr_l[i] += q * prev_l[i+1] # from i+1, left (pass) curr_l[i] += p * prev_r[i+1] # from i+1, right (flee) # Compute max difference for i in range(1, N+1): max_diff = max(max_diff, abs(curr_r[i] - prev_r[i]), abs(curr_l[i] - prev_l[i])) # Check convergence if max_diff < epsilon: break # Swap current to previous for next iteration prev_r, curr_r = curr_r, prev_r prev_l, curr_l = curr_l, prev_l # Calculate the result result = p * prev_r[1] + q * prev_l[1] print("{0:.15f}".format(result)) if __name__ == "__main__": main()