#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); } |