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
#include<iostream>
constexpr int MN=8e3+5;
int pref[2][MN];
int sum(int a,int b,int c){return pref[c][b]-pref[c][a-1];}
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
int n,k,t,a;string s;
cin>>n>>k>>t>>s;
for(int j=1;j<=n;j++)
{
    if(s[j-1]=='1') pref[0][j]+=1;
     if(s[j-1]=='2') pref[1][j]+=1;
    pref[0][j]+=pref[0][j-1];
    pref[1][j]+=pref[1][j-1];
}
int need=max(0,pref[0][n]+pref[1][n]-k);
if(pref[1][n]>=need){cout<<n-need<<endl;return 0;}
int kan=-1;
for(int j=1;j<=n-2*t;j++)
    for(int z=j+t;z<=n-t;z++)
    {
        int wb=need-sum(j+t,z,0)-sum(j+t,z,1);
        if(wb<=0)kan=max(kan,n-(z+t-j+1));
        else if(sum(j+t,z,0)+sum(j+t,z,1)+sum(1,j-1,1)+sum(z+t+1,n,1)>=need) kan=max(kan,n-(z+t-j+1+wb));
        //cout<<j<<' '<<z<<' '<<' '<<kan<<endl;
    }
cout<<kan<<endl;
}