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