#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve() {
ll n,k,t;
cin>>n>>k>>t;
string s;
cin>>s;
ll lost=0, c=0;
vector <vector <ll> > pref(n, vector <ll> (3,0)), suf(n, vector <ll> (3,0));
pref[0][s.front()-'1']++;
if(s.front()=='1') {
c++;
}
for(ll i=1;i<n;i++) {
for(ll j=0;j<3;j++) {
pref[i][j]=pref[i-1][j];
}
pref[i][s[i]-'1']++;
if(s[i]=='1') {
c++;
}
}
suf[n-1][s.back()-'1']++;
for(ll i=n-2;i>=0;i--) {
for(ll j=0;j<3;j++) {
suf[i][j]=suf[i+1][j];
}
suf[i][s[i]-'1']++;
}
ll all=pref[n-1][0]+pref[n-1][1];
ll res=n-max(0ll, all-k);
if(pref[n-1][0]>k) {
res=0;
}
bool czy=0;
for(ll i=t;i<n;i++) {
for(ll j=i;j<n-t;j++) {
ll lost=pref[i-1][0]+pref[i-1][1]+suf[j+1][0]+suf[j+1][1];
ll tmp=i-t+(n-1-(j+t));
//cout<<tmp<<"\n";
ll rest=0;
if(i-t-1>=0) {
lost-=pref[i-t-1][1];
rest+=pref[i-t-1][1];
}
if(j+t+1<n) {
lost-=suf[j+t+1][1];
rest+=suf[j+t+1][1];
}
//cout<<i<<" "<<j<<" "<<lost<<"\n";
//cout<<tmp<<"\n";
if(lost>k) {
continue;
}
else {
czy=1;
}
ll p=k-lost;
tmp-=max(0ll, rest-p);
res=max(res, tmp);
}
}
if(!czy) {
cout<<"-1\n";
return;
}
cout<<res<<"\n";
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
solve();
}
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include<bits/stdc++.h> using namespace std; typedef long long ll; void solve() { ll n,k,t; cin>>n>>k>>t; string s; cin>>s; ll lost=0, c=0; vector <vector <ll> > pref(n, vector <ll> (3,0)), suf(n, vector <ll> (3,0)); pref[0][s.front()-'1']++; if(s.front()=='1') { c++; } for(ll i=1;i<n;i++) { for(ll j=0;j<3;j++) { pref[i][j]=pref[i-1][j]; } pref[i][s[i]-'1']++; if(s[i]=='1') { c++; } } suf[n-1][s.back()-'1']++; for(ll i=n-2;i>=0;i--) { for(ll j=0;j<3;j++) { suf[i][j]=suf[i+1][j]; } suf[i][s[i]-'1']++; } ll all=pref[n-1][0]+pref[n-1][1]; ll res=n-max(0ll, all-k); if(pref[n-1][0]>k) { res=0; } bool czy=0; for(ll i=t;i<n;i++) { for(ll j=i;j<n-t;j++) { ll lost=pref[i-1][0]+pref[i-1][1]+suf[j+1][0]+suf[j+1][1]; ll tmp=i-t+(n-1-(j+t)); //cout<<tmp<<"\n"; ll rest=0; if(i-t-1>=0) { lost-=pref[i-t-1][1]; rest+=pref[i-t-1][1]; } if(j+t+1<n) { lost-=suf[j+t+1][1]; rest+=suf[j+t+1][1]; } //cout<<i<<" "<<j<<" "<<lost<<"\n"; //cout<<tmp<<"\n"; if(lost>k) { continue; } else { czy=1; } ll p=k-lost; tmp-=max(0ll, rest-p); res=max(res, tmp); } } if(!czy) { cout<<"-1\n"; return; } cout<<res<<"\n"; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); solve(); } |
English