結果
問題 | No.2964 Obstruction Bingo |
ユーザー |
|
提出日時 | 2024-11-16 17:25:51 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,818 bytes |
コンパイル時間 | 831 ms |
コンパイル使用メモリ | 82,000 KB |
実行使用メモリ | 156,928 KB |
最終ジャッジ日時 | 2024-11-16 17:27:27 |
合計ジャッジ時間 | 95,250 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 TLE * 21 |
ソースコード
from collections import deque, defaultdict as ddfrom copy import deepcopyfrom heapq import heappop, heappush, heappushpop, heapifyINF = 1 << 60MOD = 998244353def fast_mod_pow(x, p, m):res = 1t = xz = pwhile z > 0:if z % 2 == 1:res = (res * t) % mt = (t * t) % mz //= 2return resdef extended_gcd(a, b):if b == 0:return a, 1, 0else:g, x, y = extended_gcd(b, a % b)return g, y, x - (a // b) * ydef mod_inverse(a, m):_, x, _ = extended_gcd(a, m)return (x % m + m) % mdef main():l, k = map(int, input().split())s = list(input())t = list(input())a = list(map(int, input().split()))ac = sum(a)div = mod_inverse(ac, MOD)for i in range(26):a[i] = (a[i]*div)%MODz = ord("a")for i in range(l):s[i] = ord(s[i])-zt[i] = ord(t[i])-zdp = [[0 for _ in range(k+2)]for _ in range(k+2)]dp[0][0] = 1for _ in range(k):for i in range(k, -1, -1):for j in range(k, -1, -1):if abs(i-j) >= l: continueif s[i%l]==t[j%l]:dp[i+1][j+1] = (dp[i+1][j+1]+dp[i][j]*a[s[i%l]])%MODdp[i][j] = (dp[i][j]*(MOD+1-a[s[i%l]])%MOD)%MODelse:dp[i+1][j] = (dp[i+1][j]+dp[i][j]*a[s[i%l]])%MODdp[i][j+1] = (dp[i][j+1]+dp[i][j]*a[t[j%l]])%MODdp[i][j] = (dp[i][j]*(2*MOD+1-a[s[i%l]]-a[t[j%l]]))%MODans1, ans2 = 0, 0for i in range(k+2):for j in range(k+2):if i+l <= j:ans2 = (ans2+dp[i][j])%MODelif i >= l+j:ans1 = (ans1+dp[i][j])%MODprint(ans1, ans2)if __name__ == "__main__":main()