結果
| 問題 |
No.2215 Slide Subset Sum
|
| コンテスト | |
| ユーザー |
tktk_snsn
|
| 提出日時 | 2023-02-11 02:30:03 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,054 bytes |
| コンパイル時間 | 471 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 446,940 KB |
| 最終ジャッジ日時 | 2024-07-07 19:23:25 |
| 合計ジャッジ時間 | 21,224 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 27 WA * 18 |
ソースコード
mod = 998244353
def merge(X, Y, K):
res = X[0] * Y[0] - 1
for i in range(1, K):
res += X[i] * Y[K - i]
res %= mod
return res
def calc_dp(K, A):
dp = [0] * K
dp[0] = 1
for a in A:
tmp = [0] * K
for i in range(K):
tmp[i] = dp[i - a]
for i in range(K):
dp[i] += tmp[i]
dp[i] %= mod
yield dp[:]
def main():
N, M, K = map(int, input().split())
MM = 2 * M
block = (N + MM - 1) // MM
A = [0] * (block * MM)
for i, a in enumerate(map(int, input().split())):
A[i] = a
answer = []
for i in range(block):
L = [A[j] for j in range(MM*i, MM*i+M)][::-1]
R = [A[j] for j in range(MM*i+M, MM*i+2*M)]
dpL = list(calc_dp(K, L))[::-1]
dpR = list(calc_dp(K, R))
answer.append((dpL[0][0] - 1) % mod)
for j in range(M - 1):
answer.append(merge(dpL[j+1], dpR[j], K))
answer.append((dpR[M-1][0] - 1) % mod)
print(*answer[:N - M + 1], sep="\n")
main()
tktk_snsn