#include <bits/stdc++.h>
using namespace std;
const int MX=8008;
int n,k,t,a[MX],o[MX];
char s[MX];
int main() {
scanf("%d%d%d",&n,&k,&t);
scanf("%s",s+1);
for (int i=1; i<=n; i++) {
a[i]=a[i-1]+int(s[i]=='2');
o[i]=o[i-1]+int(s[i]=='1');
}
int best=-1;
if (o[n]<=k) best=n-max(o[n]+a[n]-k,0);
for (int i=1; i<=n; i++) for (int j=i+2*t; j<=n; j++) {
int cur=o[n]-o[j-t]+o[i+t-1]+a[i+t-1]-a[i-1]+a[j]-a[j-t];
if (cur<=k) best=max(best,i-1+n-j-max(0,a[i-1]+a[n]-a[j]-(k-cur)));
}
printf("%d\n",best);
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <bits/stdc++.h> using namespace std; const int MX=8008; int n,k,t,a[MX],o[MX]; char s[MX]; int main() { scanf("%d%d%d",&n,&k,&t); scanf("%s",s+1); for (int i=1; i<=n; i++) { a[i]=a[i-1]+int(s[i]=='2'); o[i]=o[i-1]+int(s[i]=='1'); } int best=-1; if (o[n]<=k) best=n-max(o[n]+a[n]-k,0); for (int i=1; i<=n; i++) for (int j=i+2*t; j<=n; j++) { int cur=o[n]-o[j-t]+o[i+t-1]+a[i+t-1]-a[i-1]+a[j]-a[j-t]; if (cur<=k) best=max(best,i-1+n-j-max(0,a[i-1]+a[n]-a[j]-(k-cur))); } printf("%d\n",best); return 0; } |
English