// clang-format off
#include <bits/stdc++.h>
using namespace std;
#define ALL(x) (x).begin(), (x).end()
template<class C> void mini(C &a5, C b5) { a5 = min(a5, b5); }
template<class C> void maxi(C &a5, C b5) { a5 = max(a5, b5); }
#ifdef LOCAL
const bool debug = true;
#else
const bool debug = false;
#define cerr if (true) {} else cout
#endif
// clang-format on
// #define int long long
#define double long double
const int INF = 1e18;
const int mod = 1e9 + 7;
const int nax = 1e5 + 5;
int prefsum[5][nax];
inline int get(int l, int r, int c) {
return prefsum[c][r] - prefsum[c][l - 1];
}
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, k, t;
cin >> n >> k >> t;
for (int i = 1; i <= n; i++) {
char c;
cin >> c;
c -= '0';
for (int j = 0; j < 5; j++) {
prefsum[j][i] = prefsum[j][i - 1];
}
prefsum[c][i]++;
}
int res = -1;
if (get(1, n, 1) <= k) {
res = get(1, n, 3) + min(k, get(1, n, 1) + get(1, n, 2));
}
for (int l = 1; l <= n; l++) {
for (int r = l + t + t - 1; r <= n; r++) {
int skipped = get(1, l + t - 1, 1) + get(r - t + 1, n, 1) +
get(l, l + t - 1, 2) + get(r - t + 1, r, 2);
if (skipped > k)
continue;
int candidate = get(1, l - 1, 3) + get(r + 1, n, 3) +
get(1, l - 1, 1) + get(r + 1, n, 1);
candidate += min(k - skipped, get(1, l - 1, 2) + get(r + 1, n, 2));
if (candidate > res)
res = candidate;
}
}
cout << res << '\n';
return 0;
} /*
*/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | // clang-format off #include <bits/stdc++.h> using namespace std; #define ALL(x) (x).begin(), (x).end() template<class C> void mini(C &a5, C b5) { a5 = min(a5, b5); } template<class C> void maxi(C &a5, C b5) { a5 = max(a5, b5); } #ifdef LOCAL const bool debug = true; #else const bool debug = false; #define cerr if (true) {} else cout #endif // clang-format on // #define int long long #define double long double const int INF = 1e18; const int mod = 1e9 + 7; const int nax = 1e5 + 5; int prefsum[5][nax]; inline int get(int l, int r, int c) { return prefsum[c][r] - prefsum[c][l - 1]; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, k, t; cin >> n >> k >> t; for (int i = 1; i <= n; i++) { char c; cin >> c; c -= '0'; for (int j = 0; j < 5; j++) { prefsum[j][i] = prefsum[j][i - 1]; } prefsum[c][i]++; } int res = -1; if (get(1, n, 1) <= k) { res = get(1, n, 3) + min(k, get(1, n, 1) + get(1, n, 2)); } for (int l = 1; l <= n; l++) { for (int r = l + t + t - 1; r <= n; r++) { int skipped = get(1, l + t - 1, 1) + get(r - t + 1, n, 1) + get(l, l + t - 1, 2) + get(r - t + 1, r, 2); if (skipped > k) continue; int candidate = get(1, l - 1, 3) + get(r + 1, n, 3) + get(1, l - 1, 1) + get(r + 1, n, 1); candidate += min(k - skipped, get(1, l - 1, 2) + get(r + 1, n, 2)); if (candidate > res) res = candidate; } } cout << res << '\n'; return 0; } /* */ |
English