結果

問題 No.1646 Avoid Palindrome
ユーザー tamatotamato
提出日時 2021-08-13 21:47:50
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 690 ms / 3,000 ms
コード長 1,042 bytes
コンパイル時間 324 ms
コンパイル使用メモリ 82,944 KB
実行使用メモリ 77,824 KB
最終ジャッジ日時 2024-11-08 15:06:39
合計ジャッジ時間 20,250 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 40
権限があれば一括ダウンロードができます

ソースコード

diff #

mod = 998244353
eps = 10**-9


def main():
    import sys
    input = sys.stdin.readline

    N = int(input())
    S = input().rstrip('\n')

    dp = [[0] * 27 for _ in range(27)]
    dp[0][0] = 1
    for i, s in enumerate(S):
        dp_new = [[0] * 27 for _ in range(27)]
        if s == "?":
            sum_j2 = [0] * 27
            for j1 in range(27):
                for j2 in range(27):
                    sum_j2[j2] = (sum_j2[j2] + dp[j1][j2])%mod
            for j2 in range(27):
                for j in range(1, 27):
                    if j2 != j:
                        dp_new[j2][j] = (sum_j2[j2] - dp[j][j2])%mod
        else:
            j = ord(s) - 96
            for j2 in range(27):
                for j1 in range(27):
                    if j1 != j and j2 != j:
                        dp_new[j2][j] = (dp_new[j2][j] + dp[j1][j2])%mod
        dp = dp_new
    ans = 0
    for j1 in range(27):
        for j2 in range(27):
            ans = (ans + dp[j1][j2])%mod
    print(ans)


if __name__ == '__main__':
    main()
0