#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 8007;
int ile[5][N];
int main() {
int n, k, t;
char c;
cin >> n >> k >> t;
for (int i = 1; i <= n; i++) {
cin >> c;
for (int j = 1; j <= 3; j++)
ile[j][i] = ile[j][i - 1];
ile[c - '0'][i]++;
}
k = max(0, ile[1][n] + ile[2][n] - k);
int best = -1;
if (ile[2][n] >= k) {
best = n - k;
}
for (int l = t + 1; l <= n; l++) {
for (int r = l; r + t <= n; r++) {
int wbiurze = ile[1][r] - ile[1][l - 1] + ile[2][r] - ile[2][l - 1];
int wdomu = ile[2][l - t - 1] + ile[2][n] - ile[2][r + t];
if (wbiurze + wdomu < k) {
continue;
}
best = max(best, n - 2 * t - (r - l + 1) - max(k - wbiurze, 0));
}
}
cout << best;
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 | #include <iostream> #include <map> #include <vector> #include <algorithm> using namespace std; const int N = 8007; int ile[5][N]; int main() { int n, k, t; char c; cin >> n >> k >> t; for (int i = 1; i <= n; i++) { cin >> c; for (int j = 1; j <= 3; j++) ile[j][i] = ile[j][i - 1]; ile[c - '0'][i]++; } k = max(0, ile[1][n] + ile[2][n] - k); int best = -1; if (ile[2][n] >= k) { best = n - k; } for (int l = t + 1; l <= n; l++) { for (int r = l; r + t <= n; r++) { int wbiurze = ile[1][r] - ile[1][l - 1] + ile[2][r] - ile[2][l - 1]; int wdomu = ile[2][l - t - 1] + ile[2][n] - ile[2][r + t]; if (wbiurze + wdomu < k) { continue; } best = max(best, n - 2 * t - (r - l + 1) - max(k - wbiurze, 0)); } } cout << best; return 0; } |
English