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