結果
| 問題 |
No.2964 Obstruction Bingo
|
| コンテスト | |
| ユーザー |
timi
|
| 提出日時 | 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)
timi