結果

問題 No.2040 010-1 Deletion
コンテスト
ユーザー kidodesu
提出日時 2026-07-17 20:44:39
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 159 ms / 3,000 ms
+ 225µs
コード長 948 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 552 ms
コンパイル使用メモリ 95,724 KB
実行使用メモリ 84,608 KB
最終ジャッジ日時 2026-07-17 20:44:46
合計ジャッジ時間 6,424 ms
ジャッジサーバーID
(参考情報)
judge1_1 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 33
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

mod = 998244353
def main():
    N = 3001
    X = 1500
    n = int(input())
    S = input()
    dp = [0 for _ in range(2*N)]
    a = 1
    for idx in range(n):
        s = S[idx]
        ndp = [0 for _ in range(2*N)]
        if s != "1":
            ndp[2] = a
        if s == "0":
            a = 0
        if s != "1":
            for i in range(-X, X+1):
                v0 = (i+1)*2
                v1 = (i-1)*2
                if -X <= v0//2 <= X:
                    ndp[v0] = (ndp[v0]+dp[i*2]) % mod
                if -X <= v0//2 <= X:
                    ndp[v1] = (ndp[v1]+dp[i*2+1]) % mod
        if s != "0":
            for i in range(-X, X+1):
                v = i*2+1
                if -X <= v//2 <= X:
                    ndp[v] = (ndp[v]+dp[i*2]+dp[i*2+1]) % mod
        dp = ndp
        #print(dp[-10:] + dp[:10])
    ans = a
    for u in range(-X, 1, 2):
        ans = (ans+dp[u*2]+dp[u*2+1]) % mod
    return ans

print(main())
0