結果
問題 |
No.2964 Obstruction Bingo
|
ユーザー |
![]() |
提出日時 | 2024-11-25 03:41:46 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,339 ms / 2,468 ms |
コード長 | 1,354 bytes |
コンパイル時間 | 365 ms |
コンパイル使用メモリ | 82,300 KB |
実行使用メモリ | 256,424 KB |
最終ジャッジ日時 | 2024-11-25 03:42:27 |
合計ジャッジ時間 | 40,797 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 49 |
ソースコード
import sys input = sys.stdin.readline L,K=map(int,input().split()) S=input().strip() T=input().strip() mod=998244353 S2=[] T2=[] for s in S: S2.append(ord(s)-97) for t in T: T2.append(ord(t)-97) A=list(map(int,input().split())) SUM=sum(A) INV=pow(SUM,mod-2,mod) DP=[[0]*(K+1) for i in range(K+1)] DP[0][0]=1 for tt in range(K): NDP=[[0]*(K+1) for i in range(K+1)] for i in range(tt+1): for j in range(tt+1): if abs(i-j)==L: NDP[i][j]+=DP[i][j] if i<j: break continue if DP[i][j]==0: continue x=S2[i%len(S2)] y=T2[j%len(T2)] if x==y: NDP[i+1][j+1]+=DP[i][j]*A[x]%mod*INV NDP[i][j]+=DP[i][j]*(SUM-A[x])%mod*INV NDP[i][j]%=mod NDP[i+1][j+1]%=mod else: NDP[i+1][j]+=DP[i][j]*A[x]%mod*INV NDP[i][j+1]+=DP[i][j]*A[y]%mod*INV NDP[i][j]+=DP[i][j]*(SUM-A[x]-A[y])%mod*INV NDP[i+1][j]%=mod NDP[i][j+1]%=mod NDP[i][j]%=mod DP=NDP ANS1=0 ANS2=0 for i in range(K+1): for j in range(K+1): if i-j==L: ANS1+=DP[i][j] if j-i==L: ANS2+=DP[i][j] print(ANS1%mod,ANS2%mod)