#include <iostream>
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,k,t,maxi=-1,all=0;
cin>>n>>k>>t;
int g0=0,g1=t,cskip=0;
char a[n];
for(int i=0;i<n;i++){
cin>>a[i];
if(a[i]=='1'){
cskip++;
}
if(a[i]!='3'){
all++;
}
}
if(cskip<=k){
cout<<n-max(0,all-k);
return 0;
}
for(int i=0;i<(t<<1);i++){
if(a[i]=='2'){
cskip++;
}
}
int off=0;
while(1){
/*----print
for(int i=0; i<n; i++){
cout<<a[i];
}
cout<<"\n";
for(int i=0;i<g0;i++){
cout<<" ";
}
for(int i=0;i<t;i++){
cout<<"#";
}
for(int i=g0+t;i<g1;i++){
cout<<"-";
}
for(int i=0;i<t;i++){
cout<<"#";
}
cout<<"\n";
cout<<g0<<" "<<g1<<"\n";
cout<<cskip<<" "<<off<<" "<<all<<" "<<maxi<<"\n";
//----*/
if(cskip>k){
if(g0+t<g1 && (a[g0+t]=='3'||(a[g0+t]!='3'&&a[g0]=='2'))){
if(a[g0]=='2'){
cskip--;
}
g0++;
continue;
}else{
if(g1+t>=n){
break;
}
if(a[g1]!='3'){
cskip--;
off++;
}
if(a[g1+t]=='2'){
cskip++;
}
g1++;
}
}else{
maxi=max(maxi,n-g1-t+g0-max(0,all-k-off));
if(a[g0+t]!='3'){
cskip++;
off--;
}
if(a[g0]=='2'){
cskip--;
}
g0++;
}
}
cout<<maxi;
return 0;
}
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 79 80 81 82 83 84 85 86 87 88 89 90 91 | #include <iostream> using namespace std; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,k,t,maxi=-1,all=0; cin>>n>>k>>t; int g0=0,g1=t,cskip=0; char a[n]; for(int i=0;i<n;i++){ cin>>a[i]; if(a[i]=='1'){ cskip++; } if(a[i]!='3'){ all++; } } if(cskip<=k){ cout<<n-max(0,all-k); return 0; } for(int i=0;i<(t<<1);i++){ if(a[i]=='2'){ cskip++; } } int off=0; while(1){ /*----print for(int i=0; i<n; i++){ cout<<a[i]; } cout<<"\n"; for(int i=0;i<g0;i++){ cout<<" "; } for(int i=0;i<t;i++){ cout<<"#"; } for(int i=g0+t;i<g1;i++){ cout<<"-"; } for(int i=0;i<t;i++){ cout<<"#"; } cout<<"\n"; cout<<g0<<" "<<g1<<"\n"; cout<<cskip<<" "<<off<<" "<<all<<" "<<maxi<<"\n"; //----*/ if(cskip>k){ if(g0+t<g1 && (a[g0+t]=='3'||(a[g0+t]!='3'&&a[g0]=='2'))){ if(a[g0]=='2'){ cskip--; } g0++; continue; }else{ if(g1+t>=n){ break; } if(a[g1]!='3'){ cskip--; off++; } if(a[g1+t]=='2'){ cskip++; } g1++; } }else{ maxi=max(maxi,n-g1-t+g0-max(0,all-k-off)); if(a[g0+t]!='3'){ cskip++; off--; } if(a[g0]=='2'){ cskip--; } g0++; } } cout<<maxi; return 0; } |
English