#include <bits/stdc++.h> using namespace std; int n,k,t,odp=-1; int zdalne[8002],praca[8002],ile[8002]; int main() { cin>>n>>k>>t; for(int i=1;i<=n;i++){ char a; cin>>a; if(a=='1') praca[i]=1; else if(a=='2') zdalne[i]=1; else ile[i]=1; zdalne[i]+=zdalne[i-1]; praca[i]+=praca[i-1]; } for(int i=1;i<=n;i++){ for(int j=2*t-1+i;j<=n;j++){ int opusz1=zdalne[j]-zdalne[j-t]+zdalne[i+t-1]-zdalne[i-1]+praca[n]-praca[j-t]+praca[i+t-1]; if(opusz1>k)continue; int opusz2=zdalne[n]-zdalne[j]+zdalne[i-1]; int dlug=i-1+n-j; if(opusz1+opusz2<=k) odp=max(odp,dlug); else odp=max(odp,dlug-opusz1-opusz2+k); } } if(praca[n]<=k){ if(praca[n]+zdalne[n]<=k) odp=n; else odp=max(odp,n-praca[n]-zdalne[n]+k); } cout<<odp; 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 | #include <bits/stdc++.h> using namespace std; int n,k,t,odp=-1; int zdalne[8002],praca[8002],ile[8002]; int main() { cin>>n>>k>>t; for(int i=1;i<=n;i++){ char a; cin>>a; if(a=='1') praca[i]=1; else if(a=='2') zdalne[i]=1; else ile[i]=1; zdalne[i]+=zdalne[i-1]; praca[i]+=praca[i-1]; } for(int i=1;i<=n;i++){ for(int j=2*t-1+i;j<=n;j++){ int opusz1=zdalne[j]-zdalne[j-t]+zdalne[i+t-1]-zdalne[i-1]+praca[n]-praca[j-t]+praca[i+t-1]; if(opusz1>k)continue; int opusz2=zdalne[n]-zdalne[j]+zdalne[i-1]; int dlug=i-1+n-j; if(opusz1+opusz2<=k) odp=max(odp,dlug); else odp=max(odp,dlug-opusz1-opusz2+k); } } if(praca[n]<=k){ if(praca[n]+zdalne[n]<=k) odp=n; else odp=max(odp,n-praca[n]-zdalne[n]+k); } cout<<odp; return 0; } |