結果
| 問題 | No.2222 Respawn | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2023-02-17 23:07:19 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 145 ms / 2,000 ms | 
| コード長 | 1,695 bytes | 
| コンパイル時間 | 178 ms | 
| コンパイル使用メモリ | 81,920 KB | 
| 実行使用メモリ | 95,616 KB | 
| 最終ジャッジ日時 | 2024-07-19 14:18:56 | 
| 合計ジャッジ時間 | 4,061 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 30 | 
ソースコード
import sys,random,bisect
from collections import deque,defaultdict
from heapq import heapify,heappop,heappush
from itertools import permutations
from math import gcd,log
input = lambda :sys.stdin.readline().rstrip()
mi = lambda :map(int,input().split())
li = lambda :list(mi())
N = int(input())
S = input().rstrip()
S += "#"
dp = [10**15] * N
dp[N-1] = 0
dp_save = [0] * N
dp_save_p = [0] * N
dp_back_p = [0] * N
dp_back_e = [0] * N
for i in range(N-1)[::-1]:
    if S[i]=="#":
        continue
    if i+1 <= N and S[i+1]==".":
        if i+1 != N-1:
            dp_back_p[i] += dp_back_p[i+1]/3
            dp_back_e[i] += (dp_back_p[i+1]+dp_back_e[i+1])/3
            dp_save[i] += 1/9 * (2+dp[i+1]) + 1/3 * (dp_save_p[i+1]+dp_save[i+1])
            dp_save_p[i] += 1/9 + 1/3 * dp_save_p[i+1]
        else:
            dp_save[i] += 1/3
            dp_save_p[i] += 1/3
    elif i+1 <= N:
        dp_back_p[i] += 1/3
        dp_back_e[i] += 1/3
    if i+2 <= N and S[i+2]==".":
        if i+2 != N-1:
            dp_back_p[i] += dp_back_p[i+2]/3
            dp_back_e[i] += (dp_back_p[i+2]+dp_back_e[i+2])/3
            dp_save[i] += 1/9 * (2+dp[i+2]) + 1/3 * (dp_save_p[i+2]+dp_save[i+2])
            dp_save_p[i] += 1/9 + 1/3 * dp_save_p[i+2]
        else:
            dp_save[i] += 1/3
            dp_save_p[i] += 1/3
    elif i+2 <= N:
        dp_back_p[i] += 1/3
        dp_back_e[i] += 1/3
    
    """
    dp[i] = 1/3 * (1+dp[i]) + dp_save[i] + dp_back_p[i] * dp[i] + dp_back_e[i]
    """
    #print(dp_save[i],dp_back_e[i],dp_back_p[i])
    #print(dp_save_p[i]+dp_back_p[i])
    dp[i] = (1/3+dp_save[i]+dp_back_e[i]) / (2/3-dp_back_p[i])
    #print(dp[i])
print(dp[0])
    
            
            
            
        