結果
問題 |
No.3040 Aoiスコア
|
ユーザー |
![]() |
提出日時 | 2025-02-28 21:56:44 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 97 ms / 1,000 ms |
コード長 | 753 bytes |
コンパイル時間 | 164 ms |
コンパイル使用メモリ | 82,908 KB |
実行使用メモリ | 77,652 KB |
最終ジャッジ日時 | 2025-06-20 20:57:31 |
合計ジャッジ時間 | 2,723 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 26 |
ソースコード
N,M=map(int,input().split()) S=input() edge=[[] for _ in range(N)] for _ in range(M): a,b=map(int,input().split()) edge[a-1].append(b-1) edge[b-1].append(a-1) qc=S.count('?') p=998244353 ans=0 for i in range(N): if S[i] != "?" and S[i] != "o": continue use = qc if S[i] == "?": use -= 1 ac,ic,qqc=0,0,0 for e in edge[i]: if S[e] == "a": ac+=1 elif S[e] == "i": ic+=1 elif S[e] == "?": qqc+=1 #aとi ans+=ac*ic*pow(26,use,p) ans%=p #aと? ans+=ac*qqc*pow(26,use-1,p) ans%=p #iと? ans+=ic*qqc*pow(26,use-1,p) ans%=p #?と? if qqc >= 2: ans+=qqc*(qqc-1)*pow(26,use-2,p) ans%=p print(ans)