#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int maxx = 8e3+7;
int pre[maxx][4];
int n,k,t;
int que(int a, int b, int x){
return pre[a+1][x] - pre[b][x];
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>k>>t;
string s; cin>>s;
for(int i=0; n>i; i++){
if(s[i] == '3'){
pre[i+1][3] = 1;
}else if(s[i] == '2'){
pre[i+1][2] = 1;
}else{
pre[i+1][1] = 1;
}
for(int j=1; 3>=j; j++){
pre[i+1][j] += pre[i][j];
}
}
int res = -1;
// cout<<" que(n,0,3) : "<<que(n-1,0,3)<<endl;
// cout<<" que(n,0,2) : "<<que(n-1,0,2)<<endl;
// cout<<" que(n,0,1) : "<<que(n-1,0,1)<<endl;
if( k - que(n-1,0,1) >= 0){
res = min(k,que(n-1,0,2)+que(n-1,0,1)) + que(n-1,0,3);
}
//cout<<"res bez pojscia do biura : "<<res<<endl;
for(int i=t; n-t>i; i++){
for(int j=i; n-t>j; j++){
//cout<<"{ i , j } -> "<<i<<" "<<j<<endl;
int lost_in_moving = que(i-1,i-t,1) + que(i-1,i-t,2) + que(j+t,j+1,1) + que(j+t,j+1,2);
// cout<<"lost_in_moving : "<<lost_in_moving<<endl;
int lost_out_office = 0;
int x = 0;
if(i-t != 0) lost_out_office += que(i-t-1,0,1);
if(j+t != n-1) lost_out_office += que(n-1,j+t+1,1);
//cout<<"lost_out_office : "<<lost_out_office<<endl;
if(lost_in_moving + lost_out_office <= k){
//cout<<"dla tego przedzialu dziala"<<endl;
int pom = 0;
int pom2 = 0;
if(i-t != 0) pom += que(i-t-1,0,3);
if(j+t != n-1) pom += que(n-1,j+t+1,3);
pom += lost_out_office;
if(i-t != 0) pom2 += que(i-t-1,0,2);
if(j+t != n-1) pom2 += que(n-1,j+t+1,2);
//cout<<"pom : "<<pom<<endl;
pom += min(k - lost_in_moving - lost_out_office, pom2);
//cout<<"pom2 : "<<pom2<<endl;
res = max(pom,res);
}
//cout<<endl;
}
//cout<<endl;
}
cout<<res;
}
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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; const int maxx = 8e3+7; int pre[maxx][4]; int n,k,t; int que(int a, int b, int x){ return pre[a+1][x] - pre[b][x]; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>k>>t; string s; cin>>s; for(int i=0; n>i; i++){ if(s[i] == '3'){ pre[i+1][3] = 1; }else if(s[i] == '2'){ pre[i+1][2] = 1; }else{ pre[i+1][1] = 1; } for(int j=1; 3>=j; j++){ pre[i+1][j] += pre[i][j]; } } int res = -1; // cout<<" que(n,0,3) : "<<que(n-1,0,3)<<endl; // cout<<" que(n,0,2) : "<<que(n-1,0,2)<<endl; // cout<<" que(n,0,1) : "<<que(n-1,0,1)<<endl; if( k - que(n-1,0,1) >= 0){ res = min(k,que(n-1,0,2)+que(n-1,0,1)) + que(n-1,0,3); } //cout<<"res bez pojscia do biura : "<<res<<endl; for(int i=t; n-t>i; i++){ for(int j=i; n-t>j; j++){ //cout<<"{ i , j } -> "<<i<<" "<<j<<endl; int lost_in_moving = que(i-1,i-t,1) + que(i-1,i-t,2) + que(j+t,j+1,1) + que(j+t,j+1,2); // cout<<"lost_in_moving : "<<lost_in_moving<<endl; int lost_out_office = 0; int x = 0; if(i-t != 0) lost_out_office += que(i-t-1,0,1); if(j+t != n-1) lost_out_office += que(n-1,j+t+1,1); //cout<<"lost_out_office : "<<lost_out_office<<endl; if(lost_in_moving + lost_out_office <= k){ //cout<<"dla tego przedzialu dziala"<<endl; int pom = 0; int pom2 = 0; if(i-t != 0) pom += que(i-t-1,0,3); if(j+t != n-1) pom += que(n-1,j+t+1,3); pom += lost_out_office; if(i-t != 0) pom2 += que(i-t-1,0,2); if(j+t != n-1) pom2 += que(n-1,j+t+1,2); //cout<<"pom : "<<pom<<endl; pom += min(k - lost_in_moving - lost_out_office, pom2); //cout<<"pom2 : "<<pom2<<endl; res = max(pom,res); } //cout<<endl; } //cout<<endl; } cout<<res; } |
English