結果
| 問題 |
No.2215 Slide Subset Sum
|
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2023-02-05 14:16:49 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 163 ms / 3,000 ms |
| コード長 | 1,204 bytes |
| コンパイル時間 | 259 ms |
| コンパイル使用メモリ | 32,304 KB |
| 実行使用メモリ | 83,072 KB |
| 最終ジャッジ日時 | 2024-07-04 06:51:41 |
| 合計ジャッジ時間 | 6,394 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 45 |
ソースコード
#include <stdio.h>
const int Mod = 998244353;
int main()
{
int i, N, M, K, A[200001];
scanf("%d %d %d", &N, &M, &K);
for (i = 1; i <= N; i++) scanf("%d", &(A[i]));
int j, k, kk, l, tmp[101], tmpp[101];
static int prod[200001][101];
long long ans[200001];
for (l = 1; l + M - 1 <= N; l += M + 1) {
for (k = 1, prod[l+M][0] = 1; k < K; k++) prod[l+M][k] = 0;
for (i = l + M - 1; i >= l; i--) {
for (k = 0; k < K; k++) prod[i][k] = prod[i+1][k];
for (k = 0, kk = A[i]; k < K; k++, kk++) {
if (kk == K) kk = 0;
prod[i][kk] += prod[i+1][k];
if (prod[i][kk] >= Mod) prod[i][kk] -= Mod;
}
}
ans[l] = prod[l][0];
for (k = 1, tmp[0] = 1; k < K; k++) tmp[k] = 0;
for (i = l + 1; i <= l + M && i + M - 1 <= N; i++) {
for (k = 0; k < K; k++) tmpp[k] = tmp[k];
for (k = 0, kk = A[i+M-1]; k < K; k++, kk++) {
if (kk == K) kk = 0;
tmp[kk] = tmpp[k] + tmpp[kk];
if (tmp[kk] >= Mod) tmp[kk] -= Mod;
}
for (k = 1, kk = K - 1, ans[i] = (long long)prod[i][0] * tmp[0] % Mod; k < K; k++, kk--) ans[i] += (long long)prod[i][k] * tmp[kk] % Mod;
}
}
for (i = 1; i <= N - M + 1; i++) printf("%lld\n", (ans[i] + Mod - 1) % Mod);
fflush(stdout);
return 0;
}