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