#include <cstdio> #include <algorithm> using namespace std; #define MAX 8010 char buf[MAX]; int n,k,t; int ile[4][MAX]; int ile1(int i,int j) { return ile[1][j]-ile[1][i]; } int ile2(int i,int j) { return ile[2][j]-ile[2][i]; } int ile3(int i,int j) { return ile[3][j]-ile[3][i]; } int ile12(int i,int j) { return ile1(i,j) + ile2(i,j); } int ile13(int i,int j) { return ile1(i,j) + ile3(i,j); } int main() { scanf("%d %d %d %s",&n,&k,&t, buf); for(int k =1; k<=3;k++) for(int i=1;i<=n+1;i++) ile[k][i] = ile[k][i-1] + (buf[i-1] == '0' + k?1:0); int result = -1; if (ile1(0,n) <= k) result = n - max(ile12(0,n) - k, 0); for(int w=0;w+2*t<=n;w++) { for(int p=w+t;p+t<=n;p++) { if(ile1(0,w) + ile12(w,w+t) + ile12(p,p+t) + ile1(p+t,n) <= k) { int kn = k - (ile1(0,w) + ile12(w,w+t) + ile12(p,p+t) + ile1(p+t,n)); int r = ile13(0,w) + ile13(p+t,n) + min(kn, ile2(0,w) + ile2(p+t,n)); //printf("w:%d p:%d r:%d\n",w,p,r); result = max(result, r); } } } printf("%d\n", result); 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 <cstdio> #include <algorithm> using namespace std; #define MAX 8010 char buf[MAX]; int n,k,t; int ile[4][MAX]; int ile1(int i,int j) { return ile[1][j]-ile[1][i]; } int ile2(int i,int j) { return ile[2][j]-ile[2][i]; } int ile3(int i,int j) { return ile[3][j]-ile[3][i]; } int ile12(int i,int j) { return ile1(i,j) + ile2(i,j); } int ile13(int i,int j) { return ile1(i,j) + ile3(i,j); } int main() { scanf("%d %d %d %s",&n,&k,&t, buf); for(int k =1; k<=3;k++) for(int i=1;i<=n+1;i++) ile[k][i] = ile[k][i-1] + (buf[i-1] == '0' + k?1:0); int result = -1; if (ile1(0,n) <= k) result = n - max(ile12(0,n) - k, 0); for(int w=0;w+2*t<=n;w++) { for(int p=w+t;p+t<=n;p++) { if(ile1(0,w) + ile12(w,w+t) + ile12(p,p+t) + ile1(p+t,n) <= k) { int kn = k - (ile1(0,w) + ile12(w,w+t) + ile12(p,p+t) + ile1(p+t,n)); int r = ile13(0,w) + ile13(p+t,n) + min(kn, ile2(0,w) + ile2(p+t,n)); //printf("w:%d p:%d r:%d\n",w,p,r); result = max(result, r); } } } printf("%d\n", result); return 0; } |