結果

問題 No.3098 Linear Reversi
ユーザー autumn09
提出日時 2025-03-09 12:38:11
言語 PyPy3
(7.3.15)
結果
WA  
(最新)
AC  
(最初)
実行時間 -
コード長 1,301 bytes
コンパイル時間 690 ms
コンパイル使用メモリ 81,996 KB
実行使用メモリ 295,840 KB
最終ジャッジ日時 2025-04-06 15:00:53
合計ジャッジ時間 8,847 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 7 WA * 30
権限があれば一括ダウンロードができます

ソースコード

diff #

MOD=998244353

def solve(S):
    if S[0]=='?':
        T1='o'+S[1:]
        T2='x'+S[1:]
        return (solve(T1)+solve(T2))%MOD
    
    N=len(S)
    dp=[[0]*8 for i in range(N+1)]
    
    def update(i,j,k,l,val):
        if l>1:
            return
        b=j+ 2*k + 4*l
        dp[i][b]+=val
        dp[i][b]%=MOD
        
    if S[0]=='o':
        dp[0][3]=1
    else:
        dp[0][2]=1
        
    for i in range(N):
        for b in range(8):
            val=dp[i][b]
            j=k=l=0
            if b&1:
                j=1
            if b&2:
                k=1
            if b&4:
                l=1
            
            if S[i]!='x':
                if (j==1):
                    update(i+1,1,1,l,val)
                else:
                    if k==1:
                        update(i+1,1,0,l,val)
                    else:
                        update(i+1,1,0,l+1,val)
            if S[i]!='o':
                if (j==0):
                    update(i+1,0,1,l,val)
                else:
                    if k==1:
                        update(i+1,0,0,l,val)
                    else:
                        update(i+1,0,0,l+1,val)
    ret=0
    for b in range(8):
        ret+=dp[N][b]
        ret%=MOD
    
    return ret
    
N=int(input())
S=input()

print(solve(S))
0