結果

問題 No.3098 Linear Reversi
ユーザー autumn09
提出日時 2025-03-09 12:29:14
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,358 bytes
コンパイル時間 262 ms
コンパイル使用メモリ 82,672 KB
実行使用メモリ 501,236 KB
最終ジャッジ日時 2025-04-06 15:01:00
合計ジャッジ時間 12,283 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 4 WA * 2 TLE * 1 -- * 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