結果
問題 | No.1646 Avoid Palindrome |
ユーザー |
👑 ![]() |
提出日時 | 2021-08-13 22:24:38 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 817 ms / 3,000 ms |
コード長 | 1,504 bytes |
コンパイル時間 | 475 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 81,664 KB |
最終ジャッジ日時 | 2024-11-08 15:36:50 |
合計ジャッジ時間 | 24,230 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 40 |
ソースコード
from string import ascii_lowercase as Xfrom collections import defaultdictN=int(input())S=["*"]for s in input():if s=="?":S.append(-1)else:S.append(ord(s)-ord("a"))Mod=998244353#==================================================def answer(x):exit(print(x))def f(a,b):return 26*a+b#==================================================if N==1:if S[1]==-1:answer(26)else:answer(1)for i in range(1,N):if S[i]==S[i+1] and S[i]!=-1:answer(0)for i in range(1,N-1):if S[i]==S[i+2] and S[i]!=-1:answer(0)D=[0]*676R=range(26)if S[1]==-1:if S[2]==-1:for a in R:for b in R:if a!=b:D[f(a,b)]=1else:for a in R:if a!=S[2]:D[f(a,S[2])]=1else:if S[2]==-1:for b in R:if S[1]!=b:D[f(S[1],b)]=1else:D[f(S[1],S[2])]=1for c in S[3:]:E=DD=[0]*676if c==-1:L=[0]*26M=[0]*676for i in range(676):a,b=divmod(i,26)L[b]+=E[f(a,b)]M[f(b,a)]+=E[f(a,b)]M[f(b,b)]+=E[f(a,b)]for a in R:for b in R:D[f(a,b)]=L[a]-M[f(a,b)]else:for i in range(676):a,b=divmod(i,26)if a!=c and b!=c:D[f(b,c)]+=E[f(a,b)]for i in range(676):D[i]%=Modprint(sum(D)%Mod)