#include <algorithm>
#include <cstdio>
using namespace std;
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) FOR(i,0,n)
#define INT(x) int x; scanf("%d", &x)
char a[8001];
int s[8001][3];
int main() {
INT(n);
INT(k);
INT(t);
scanf("%s", a);
REP(i,n) REP(j,3) s[i + 1][j] = s[i][j] + (j == a[i] - '1');
int r = -1;
int mi = max(s[n][0] + s[n][1] - k, 0);
if (s[n][0] <= k) r = n - mi;
REP(x,n-(t<<1)+1) FOR(y,x+t,n-t+1) {
int hm = s[x][1] - s[0][1] + + s[n][1] - s[y + t][1];
int om = s[y][0] - s[x + t][0] + s[y][1] - s[x + t][1];
if (hm + om < mi) continue;
int rm = max(mi - om, 0);
int h = n - (y + t) + x;
r = max(r, h - rm);
}
printf("%d\n", r);
}
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 | #include <algorithm> #include <cstdio> using namespace std; #define FOR(i,a,b) for(int i=(a);i<(b);++i) #define REP(i,n) FOR(i,0,n) #define INT(x) int x; scanf("%d", &x) char a[8001]; int s[8001][3]; int main() { INT(n); INT(k); INT(t); scanf("%s", a); REP(i,n) REP(j,3) s[i + 1][j] = s[i][j] + (j == a[i] - '1'); int r = -1; int mi = max(s[n][0] + s[n][1] - k, 0); if (s[n][0] <= k) r = n - mi; REP(x,n-(t<<1)+1) FOR(y,x+t,n-t+1) { int hm = s[x][1] - s[0][1] + + s[n][1] - s[y + t][1]; int om = s[y][0] - s[x + t][0] + s[y][1] - s[x + t][1]; if (hm + om < mi) continue; int rm = max(mi - om, 0); int h = n - (y + t) + x; r = max(r, h - rm); } printf("%d\n", r); } |
English