Submission #17222478
Source Code Expand
#include <bits/stdc++.h>
typedef long long int64;
const int N = 3e2, MOD = 998244353;
int n, m, s, a[N + 5], f[N + 5][N + 5][N + 5], g[N + 5][N + 5][N + 5], h[N + 5][N + 5][N + 5];
char str[N + 5];
inline void add(int &x, const int &y) {
(x += y) >= MOD && (x -= MOD);
}
inline void sub(int &x, const int &y) {
(x -= y) < 0 && (x += MOD);
}
inline int add(const int &x) {
return x >= MOD ? x - MOD : x;
}
inline int sub(const int &x) {
return x < 0 ? x + MOD : x;
}
int main() {
scanf("%s%d", str + 1, &s);
n = strlen(str + 1);
str[n + 1] = '0';
int sum = 0;
for (int cnt = 0, i = 1; i <= n + 1; i++) {
if (str[i] == '0') {
a[++m] = cnt;
cnt = 0;
} else {
cnt++;
sum++;
}
}
s = std::min(s, sum - a[1]);
f[0][0][0] = 1;
std::fill(g[0][0], g[0][0] + n + 1, 1);
std::fill(h[0][0], h[0][0] + n + 1, 1);
for (int pre = 0, i = 1; i <= m; i++) {
pre += a[i];
for (int j = 0; j <= s; j++) {
for (int k = 0; k <= j && k + pre <= sum; k++) {
auto query = [](int *a, int l, int r) {
return l == 0 ? a[r] : sub(a[r] - a[l - 1]);
};
// for (int p = 1; p <= k; p++) {
// f[i][j][k] += f[i - 1][j - p][k - p];
// }
if (k > 0) {
add(f[i][j][k], query(h[i - 1][j - k], 0, k - 1)); // k >= 1
}
// for (int p = 0; p <= a[i]; p++) {
// f[i][j][k] += f[i - 1][j][k + p];
// }
add(f[i][j][k], query(g[i - 1][j], k, std::min(k + a[i], n)));
}
std::partial_sum(f[i][j], f[i][j] + n + 1, g[i][j], [](const int &x, const int &y) {
return add(x + y);
});
}
for (int j = 0; j <= s; j++) {
for (int k = 0; k <= n; k++) {
h[i][j][k] = add(h[i][j][k - 1] + (k + j <= n ? f[i][k + j][k] : 0));
}
}
}
int ans = 0;
for (int i = 0; i <= s; i++) {
add(ans, f[m][i][0]);
}
printf("%d\n", ans);
return 0;
}
Submission Info
Submission Time |
|
Task |
C - Shift |
User |
siyuan |
Language |
C++ (GCC 9.2.1) |
Score |
800 |
Code Size |
1878 Byte |
Status |
AC |
Exec Time |
93 ms |
Memory |
85228 KiB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:23:7: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
23 | scanf("%s%d", str + 1, &s);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
800 / 800 |
Status |
|
|
Set Name |
Test Cases |
Sample |
s1.txt, s2.txt, s3.txt |
All |
01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, s1.txt, s2.txt, s3.txt |
Case Name |
Status |
Exec Time |
Memory |
01.txt |
AC |
70 ms |
56456 KiB |
02.txt |
AC |
56 ms |
49780 KiB |
03.txt |
AC |
87 ms |
83976 KiB |
04.txt |
AC |
30 ms |
13136 KiB |
05.txt |
AC |
58 ms |
45516 KiB |
06.txt |
AC |
31 ms |
14876 KiB |
07.txt |
AC |
71 ms |
63968 KiB |
08.txt |
AC |
75 ms |
68180 KiB |
09.txt |
AC |
37 ms |
8032 KiB |
10.txt |
AC |
1 ms |
3644 KiB |
11.txt |
AC |
93 ms |
85228 KiB |
12.txt |
AC |
76 ms |
67356 KiB |
13.txt |
AC |
88 ms |
82580 KiB |
14.txt |
AC |
35 ms |
27920 KiB |
15.txt |
AC |
53 ms |
46496 KiB |
16.txt |
AC |
41 ms |
29796 KiB |
17.txt |
AC |
36 ms |
8936 KiB |
18.txt |
AC |
75 ms |
67464 KiB |
19.txt |
AC |
11 ms |
8232 KiB |
20.txt |
AC |
9 ms |
6332 KiB |
21.txt |
AC |
11 ms |
6644 KiB |
22.txt |
AC |
9 ms |
7104 KiB |
23.txt |
AC |
45 ms |
22116 KiB |
24.txt |
AC |
42 ms |
16492 KiB |
25.txt |
AC |
5 ms |
5332 KiB |
26.txt |
AC |
5 ms |
4728 KiB |
27.txt |
AC |
48 ms |
33480 KiB |
28.txt |
AC |
20 ms |
5732 KiB |
29.txt |
AC |
2 ms |
3796 KiB |
30.txt |
AC |
3 ms |
3636 KiB |
31.txt |
AC |
2 ms |
3824 KiB |
32.txt |
AC |
2 ms |
3712 KiB |
33.txt |
AC |
3 ms |
4004 KiB |
34.txt |
AC |
3 ms |
5804 KiB |
35.txt |
AC |
13 ms |
9464 KiB |
36.txt |
AC |
2 ms |
3764 KiB |
s1.txt |
AC |
2 ms |
3612 KiB |
s2.txt |
AC |
2 ms |
3668 KiB |
s3.txt |
AC |
6 ms |
6036 KiB |