結果
問題 | No.2215 Slide Subset Sum |
ユーザー |
|
提出日時 | 2023-01-07 07:24:13 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,288 ms / 3,000 ms |
コード長 | 1,580 bytes |
コンパイル時間 | 354 ms |
コンパイル使用メモリ | 82,432 KB |
実行使用メモリ | 422,928 KB |
最終ジャッジ日時 | 2024-07-04 06:48:09 |
合計ジャッジ時間 | 31,001 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 45 |
ソースコード
import sysfrom collections import deque, Countersys.setrecursionlimit(5 * 10 ** 5)from pypyjit import set_paramset_param('max_unroll_recursion=-1')input = lambda: sys.stdin.readline().rstrip()ii = lambda: int(input())mi = lambda: map(int, input().split())li = lambda: list(mi())inf = 2 ** 63 - 1mod = 998244353import randomn, m, k = mi()a = li()MAXI = kvaluetop = []valuebottom = []dptop = []dpbottom = []X = [0] * MAXIX[0] = 1dptop.append(X)dpbottom.append(X)def push(x):valuebottom.append(x)ndp = [0] * MAXIfor v in range(MAXI):ndp[(v+x)%MAXI] += dpbottom[-1][v]ndp[v] += dpbottom[-1][v]ndp[(v+x)%MAXI] %= modndp[v] %= moddpbottom.append(ndp)def pop():if not valuetop:valuebottom.reverse()for x in valuebottom:ndp = [0] * MAXIfor v in range(MAXI):ndp[(v+x)%MAXI] += dptop[-1][v]ndp[v] += dptop[-1][v]ndp[(v+x)%MAXI] %= modndp[v] %= moddptop.append(ndp)valuetop.append(x)while valuebottom:valuebottom.pop()while len(dpbottom) > 1:dpbottom.pop()dptop.pop()valuetop.pop()def fold():ans = 0for v in range(MAXI):ans += dptop[-1][v] * dpbottom[-1][(MAXI-v) % MAXI]ans %= modreturn ansfor i in range(m):push(a[i])ans = []ans.append(fold())for i in range(m, n):pop()push(a[i])ans.append(fold())for v in ans:print((v-1) % mod)