結果
問題 |
No.3040 Aoiスコア
|
ユーザー |
![]() |
提出日時 | 2025-02-28 21:52:13 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 834 bytes |
コンパイル時間 | 229 ms |
コンパイル使用メモリ | 82,104 KB |
実行使用メモリ | 85,700 KB |
最終ジャッジ日時 | 2025-06-20 20:57:07 |
合計ジャッジ時間 | 5,220 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 23 TLE * 1 -- * 2 |
ソースコード
n,m=map(int,input().split()) S=input() e=[[] for i in range(n)] for i in range(m): a,b=map(int,input().split()) a-=1 b-=1 e[a]+=[b] e[b]+=[a] M=998244353 N=n fa=[1] for i in range(1,N+1): fa+=[fa[-1]*i%M] fb=[pow(fa[N],M-2,M)] for i in reversed(range(1,N+1)): fb+=[fb[-1]*i%M] fb.reverse() qc=S.count("?") ans=0 p26=[1] for i in range(n): p26+=[p26[-1]*26%M] p24=[1] for i in range(n): p24+=[p24[-1]*24%M] for s in range(n): if S[s]=="o" or S[s]=="?": c=[0,0,0] for t in e[s]: if S[t]=="a": c[0]+=1 if S[t]=="i": c[1]+=1 if S[t]=="?": c[2]+=1 da=0 for i in range(c[2]+1): for j in range(c[2]-i+1): da+=fb[i]*fb[j]*fb[c[2]-i-j]*(c[0]+i)*(c[1]+j)*p24[c[2]-i-j]%M da%=M ans+=da*fa[c[2]]*p26[qc-c[2]-(S[s]=="?")] ans%=M print(ans)