結果
問題 |
No.2964 Obstruction Bingo
|
ユーザー |
![]() |
提出日時 | 2024-11-24 20:03:29 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 242 ms / 2,468 ms |
コード長 | 1,356 bytes |
コンパイル時間 | 165 ms |
コンパイル使用メモリ | 82,576 KB |
実行使用メモリ | 77,704 KB |
最終ジャッジ日時 | 2024-11-24 20:03:39 |
合計ジャッジ時間 | 9,722 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 49 |
ソースコード
from sys import stdin, setrecursionlimit input = stdin.readline readline = stdin.readline # N=int(input()) # A=list(map(int, input().split())) L,K=map(int, input().split()) SS=input() TT=input() S=[];T=[] for i in range(L): S.append(ord(SS[i])-ord('a')) T.append(ord(TT[i])-ord('a')) A=list(map(int, input().split())) su=sum(A) mod=998244353 bb=pow(su,-1,mod) #bb=1 dp=[[0]*(2*L+10) for i in range(L)] dp[0][0]=1 for _ in range(K): ndp=[[0]*(2*L+10) for _ in range(L)] for a in range(L): for j in range(-L,L+1): d=dp[a][j] if abs(j)==L: ndp[a][j]+=d ndp[a][j]%=mod else: b=(a-j)%L ax,bx=S[a],T[b] if ax==bx: c=A[ax]*bb%mod ndp[(a+1)%L][j]+=d*c ndp[(a+1)%L][j]%=mod c=(su-A[ax])*bb%mod ndp[a][j]+=d*c ndp[a][j]%=mod else: c=A[ax]*bb%mod ndp[(a+1)%L][j+1]+=d*c ndp[(a+1)%L][j+1]%=mod c=A[bx]*bb%mod ndp[a%L][j-1]+=d*c ndp[a%L][j-1]%=mod c=(su-A[ax]-A[bx])*bb%mod ndp[a][j]+=d*c ndp[a][j]%=mod dp=ndp x,y=0,0 for a in range(L): for j in range(-L,L+1): if j==-L: x+=dp[a][j] x%=mod elif j==L: y+=dp[a][j] y%=mod print(y,x)