結果

問題 No.3098 Linear Reversi
コンテスト
ユーザー autumn09
提出日時 2025-03-09 14:31:21
言語 Python3
(3.14.3 + numpy 2.4.4 + scipy 1.17.1)
コンパイル:
python3 -mpy_compile _filename_
実行:
python3 _filename_
結果
WA  
実行時間 -
コード長 1,301 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 942 ms
コンパイル使用メモリ 21,408 KB
実行使用メモリ 140,024 KB
最終ジャッジ日時 2026-07-08 12:22:33
合計ジャッジ時間 19,438 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 5 WA * 21 TLE * 1 -- * 10
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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