#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for(int i= 0; i<(n); i++)
#define reps(i,s, n) for(int i= (s); i<(n); i++)
#define each(a, x) for (auto &a : x)
#define vv(T) vector<T>
#define endl '\n'
#define sz(x) (int)x.size()
#define ll long long
#define all(c) begin(c), end(c)
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pd pair<int,int>
#define wr cout<<
#define wre wr endl;
#define wrut(a) {each(i,(a))wr i<<" "; wre}
#define wrot(a,b,c) {wre wr a<<" "<<b<<" "<<c<<" ";wre}
// #define int ll
// const int inf =1e9+7;
// bool comp(pd p1,pd p2){
// return p1.se>p2.se;
// }
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n,k,t;
cin>>n>>k>>t;
// k=n-k;
string x;
cin>>x;
int s;
vv(int) pref2(n+1,0),suf2(n+1,0),pref(n+1,0);
rep(i,n){
pref2[i+1]=pref2[i];
pref[i+1]=pref[i];
if(x[i]=='2')pref2[i+1]++;
if(x[i]=='1')pref[i+1]++;
}
rep(i,n){
suf2[n-i-1]=suf2[n-i];
if(x[n-i-1]=='2')suf2[n-i-1]++;
}
s=pref[n]+pref2[n];
if(s<=k){
wr n;
return 0;
} else if(pref[n]<=k){
wr n-s+k;
return 0;
}
int m=-1;
rep(i,n-t){
reps(j,i+2*t,n){
// wrot(i,j,s-(pref2[i]+suf2[j+1]+pref[j-t+1]-pref[i+t]+pref2[j-t+1]-pref2[i+t]));
if(s-(pref2[i]+suf2[j+1]+pref[j-t+1]-pref[i+t]+pref2[j-t+1]-pref2[i+t])<=k){
// wrot(i,j,-1);
m=max(m,k-(s-(pref2[i]+suf2[j+1]+pref[j-t+1]-pref[i+t]+pref2[j-t+1]-pref2[i+t]))+i-pref2[i]+n-j-1-suf2[j+1]);
}
}
}
wr m;
}
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 55 56 57 58 59 60 61 62 63 | #include <bits/stdc++.h> using namespace std; #define rep(i, n) for(int i= 0; i<(n); i++) #define reps(i,s, n) for(int i= (s); i<(n); i++) #define each(a, x) for (auto &a : x) #define vv(T) vector<T> #define endl '\n' #define sz(x) (int)x.size() #define ll long long #define all(c) begin(c), end(c) #define fi first #define se second #define mp make_pair #define pb push_back #define pd pair<int,int> #define wr cout<< #define wre wr endl; #define wrut(a) {each(i,(a))wr i<<" "; wre} #define wrot(a,b,c) {wre wr a<<" "<<b<<" "<<c<<" ";wre} // #define int ll // const int inf =1e9+7; // bool comp(pd p1,pd p2){ // return p1.se>p2.se; // } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,k,t; cin>>n>>k>>t; // k=n-k; string x; cin>>x; int s; vv(int) pref2(n+1,0),suf2(n+1,0),pref(n+1,0); rep(i,n){ pref2[i+1]=pref2[i]; pref[i+1]=pref[i]; if(x[i]=='2')pref2[i+1]++; if(x[i]=='1')pref[i+1]++; } rep(i,n){ suf2[n-i-1]=suf2[n-i]; if(x[n-i-1]=='2')suf2[n-i-1]++; } s=pref[n]+pref2[n]; if(s<=k){ wr n; return 0; } else if(pref[n]<=k){ wr n-s+k; return 0; } int m=-1; rep(i,n-t){ reps(j,i+2*t,n){ // wrot(i,j,s-(pref2[i]+suf2[j+1]+pref[j-t+1]-pref[i+t]+pref2[j-t+1]-pref2[i+t])); if(s-(pref2[i]+suf2[j+1]+pref[j-t+1]-pref[i+t]+pref2[j-t+1]-pref2[i+t])<=k){ // wrot(i,j,-1); m=max(m,k-(s-(pref2[i]+suf2[j+1]+pref[j-t+1]-pref[i+t]+pref2[j-t+1]-pref2[i+t]))+i-pref2[i]+n-j-1-suf2[j+1]); } } } wr m; } |
English