#include<iostream>
#include<string>
#include<algorithm>
#define REP(i,n) for(int i=0;i<(n);++i)
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define FORD(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
const int MAXN = 8000;
int B[1+MAXN], Z[1+MAXN];
int res, n, k, t;
string s;
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> k >> t;
cin >> s;
B[0] = Z[0] = 0;
REP(i, n) {
B[i+1] = B[i] + (s[i] == '1');
Z[i+1] = Z[i] + (s[i] == '2');
}
// FOR(i, 0, n) cout << B[i] << " "; cout << endl;
// FOR(i, 0, n) cout << Z[i] << " "; cout << endl;
int res = -1;
if (B[n] <= k) {
res = (Z[n] + B[n] <= k) ? n : (n - B[n] - Z[n] + k);
}
int max_x = n - 2*t;
int max_y = n - t;
FOR(x, 0, max_x) FOR(y, x+t, max_y) {
int b = B[n] - B[y] + B[x+t];
int jz = Z[x+t] - Z[x] + Z[y+t] - Z[y];
if (b + jz > k) continue;
int dz = Z[x] + Z[n] - Z[y+t];
int ez = min(dz, k - (b+jz));
res = max(res, x + n - y - t + ez - dz);
}
cout << res << endl;
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 | #include<iostream> #include<string> #include<algorithm> #define REP(i,n) for(int i=0;i<(n);++i) #define FOR(i,a,b) for(int i=(a);i<=(b);++i) #define FORD(i,a,b) for(int i=(a);i>=(b);--i) using namespace std; const int MAXN = 8000; int B[1+MAXN], Z[1+MAXN]; int res, n, k, t; string s; int main(void) { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> k >> t; cin >> s; B[0] = Z[0] = 0; REP(i, n) { B[i+1] = B[i] + (s[i] == '1'); Z[i+1] = Z[i] + (s[i] == '2'); } // FOR(i, 0, n) cout << B[i] << " "; cout << endl; // FOR(i, 0, n) cout << Z[i] << " "; cout << endl; int res = -1; if (B[n] <= k) { res = (Z[n] + B[n] <= k) ? n : (n - B[n] - Z[n] + k); } int max_x = n - 2*t; int max_y = n - t; FOR(x, 0, max_x) FOR(y, x+t, max_y) { int b = B[n] - B[y] + B[x+t]; int jz = Z[x+t] - Z[x] + Z[y+t] - Z[y]; if (b + jz > k) continue; int dz = Z[x] + Z[n] - Z[y+t]; int ez = min(dz, k - (b+jz)); res = max(res, x + n - y - t + ez - dz); } cout << res << endl; return 0; } |
English