#include <stdio.h>
#include <vector>
using namespace std;
int main() {
int n, k, t;
char a[8013];
scanf("%d %d %d %s" ,&n, &k, &t, a);
vector<int> s[4];
s[1] = s[2] = s[3] = vector<int>(1, 0);
for (int i = 0; i < n; i++) {
s[1].push_back(s[1].back());
s[2].push_back(s[2].back());
s[3].push_back(s[3].back());
s[a[i]-'0'].back()++;
}
int ret = -1;
if (s[1].back() <= k) {
if(s[1].back() + s[2].back() <= k) ret = n;
else ret = s[3].back() + k;
}
for (int i = t; i < n; i++) for (int j = i; j + t < n; j++) {
// w biurze od i do j włącznie
int op_1 = s[1].back() - (s[1][j+1] - s[1][i]);
if (op_1 > k) continue;
int sam_2 = s[2][i]-s[2][i-t] + (s[2][j+t+1] - s[2][j+1]);
int dom_2 = s[2][i-t] + (s[2].back() - s[2][j+t+1]);
if (op_1 + sam_2 > k) continue;
if (op_1 + sam_2 + dom_2 <= k) ret = std::max(ret, i-t + n-(j+t+1));
else ret = std::max(ret, i-t + n-(j+t+1) - (op_1 + sam_2 + dom_2 - k));
}
printf("%d\n", ret);
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 | #include <stdio.h> #include <vector> using namespace std; int main() { int n, k, t; char a[8013]; scanf("%d %d %d %s" ,&n, &k, &t, a); vector<int> s[4]; s[1] = s[2] = s[3] = vector<int>(1, 0); for (int i = 0; i < n; i++) { s[1].push_back(s[1].back()); s[2].push_back(s[2].back()); s[3].push_back(s[3].back()); s[a[i]-'0'].back()++; } int ret = -1; if (s[1].back() <= k) { if(s[1].back() + s[2].back() <= k) ret = n; else ret = s[3].back() + k; } for (int i = t; i < n; i++) for (int j = i; j + t < n; j++) { // w biurze od i do j włącznie int op_1 = s[1].back() - (s[1][j+1] - s[1][i]); if (op_1 > k) continue; int sam_2 = s[2][i]-s[2][i-t] + (s[2][j+t+1] - s[2][j+1]); int dom_2 = s[2][i-t] + (s[2].back() - s[2][j+t+1]); if (op_1 + sam_2 > k) continue; if (op_1 + sam_2 + dom_2 <= k) ret = std::max(ret, i-t + n-(j+t+1)); else ret = std::max(ret, i-t + n-(j+t+1) - (op_1 + sam_2 + dom_2 - k)); } printf("%d\n", ret); return 0; } |
English