結果
問題 |
No.3040 Aoiスコア
|
ユーザー |
![]() |
提出日時 | 2025-02-28 21:43:13 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 762 bytes |
コンパイル時間 | 276 ms |
コンパイル使用メモリ | 82,772 KB |
実行使用メモリ | 85,624 KB |
最終ジャッジ日時 | 2025-06-20 20:55:34 |
合計ジャッジ時間 | 5,342 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 11 WA * 12 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] 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 for i in range(c[2]+1): for j in range(c[2]+1): if i+j<=c[2]: ans+=fa[c[2]]*fb[i]*fb[j]*fb[c[2]-i-j]*(c[0]+i)*(c[1]+j)*p26[qc-i-j-(S[s]=="?")] ans%=M print(ans)