#include <iostream>
#define maxn 8007
using namespace std;
char tasks[maxn];
//1-spotkanie w biurze
//2-spotkanie zdalne
//3-brak zadan
struct cal{
long long b=0;
long long z=0;
long long w=0;
};
cal tab[maxn];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
long long n,k,t; //liczba segmentow, liczba spotkan ktore moze opuscic, czas przejazdu
long long ileb=0, ilez=0,ilew=0;
cin>>n>>k>>t;
for(long long i=0;i<n;i++){
cin>>tasks[i];
if(tasks[i]=='1'){
ileb++;
if(i!=0){
tab[i]=tab[i-1];
tab[i].b++;
}
else{
tab[i].b++;
}
}
else if(tasks[i]=='2'){
ilez++;
if(i!=0){
tab[i]=tab[i-1];
tab[i].z++;
}
else{
tab[i].z++;
}
}
else{
ilew++;
if(i!=0){
tab[i]=tab[i-1];
tab[i].w++;
}
else{
tab[i].w++;
}
}
}
long long na_ile_musi=ileb-k, ile_lacznie=ileb+ilez-k;
if(ileb<=k){
//k-=ileb;
if(k>ileb+ilez){
cout<<n;
return 0;
}
cout<<n-ileb-ilez+k<<endl;
return 0;
}
cal
ile_d_p,
ile_d_l,
ile_s,
ile_poz,
ile_w;
ile_w=tab[n-1];
long long spotkania_s=0,kn,
spotkania_d=0
;
long long mam=-1,dr,dm,dz;
for(long long i=0;i<n-2*t;i++){
if(i!=0){
ile_d_l.b=tab[i+t-1].b-tab[i-1].b;
ile_d_l.z=tab[i+t-1].z-tab[i-1].z;
ile_d_l.w=tab[i+t-1].w-tab[i-1].w;
}
else{
ile_d_l.b=tab[i+t-1].b;
ile_d_l.z=tab[i+t-1].z;
ile_d_l.w=tab[i+t-1].w;
}
long long ile_jeszce;
for(long long y=i+t;y<n-t+1;y++){
ile_d_p.b=tab[y+t-1].b-tab[y-1].b;
ile_d_p.z=tab[y+t-1].z-tab[y-1].z;
ile_d_p.w=tab[y+t-1].w-tab[y-1].w;
ile_s=tab[y-1];
ile_s.b-=tab[i+t-1].b;
ile_s.z-=tab[i+t-1].z;
ile_s.w-=tab[i+t-1].w;
// cout<<"i: "<<i<<" y: "<<y<<" iled " <<ile_d_l.b<<' '<<ile_d_l.z<<" iledp "<<ile_d_p.b<<' '<<ile_d_p.z<<" iles " <<ile_s.b<<' '<<ile_s.z<<' '<<ile_s.w;
dr=ile_d_l.b+ile_d_l.z+ile_d_p.b+ile_d_p.z;//spotkania w drodze
dm=ile_w.b-ile_s.b-ile_d_l.b-ile_d_p.b;//spotkania w domu biurowe
dz=ile_w.z-ile_s.z-ile_d_l.z-ile_d_p.z;//spotkania w domu zdalne
// cout<<" iledlb "<<ile_d_l.b<<" iledlz "<<ile_d_l.z<<" iledpb "<<ile_d_p.b<<" iledlz " <<ile_d_l.z;
// cout<<" dm: "<<dm<<" dz: "<<dz<<" dr: "<<dr<<'\n';
if(dm+dr<=k){//jesli ilosc spotkan opuszczonych i spotkan w biurze podczas bycia w domu jest mniejsza niz dozwolona
//na ilu spotkaniach bedzie iles.b+iles.z
kn=k-dm-dr;//ile jeszcze moze opuscic
dz-=kn;
if(dz<0){
dz=0;
}
//czas wolny l = i-1
//czas wolny p = n-1-y-t+1
mam=max(mam,i+n-1-y-t+1-dz);
//cout<<"X: "<<i+n-1-y-t+1-dz<<"X\n";
//ile spotkan opusci w trakcie jazdy ile_d_l.b+ile_d_l.z+ile_d_p.b+ile_d_p.z
//ile jeszcze mu zostaje spotkan do zrobienia ilew.z+ilew.b
//
}
}
}
cout<<mam;
}
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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | #include <iostream> #define maxn 8007 using namespace std; char tasks[maxn]; //1-spotkanie w biurze //2-spotkanie zdalne //3-brak zadan struct cal{ long long b=0; long long z=0; long long w=0; }; cal tab[maxn]; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); long long n,k,t; //liczba segmentow, liczba spotkan ktore moze opuscic, czas przejazdu long long ileb=0, ilez=0,ilew=0; cin>>n>>k>>t; for(long long i=0;i<n;i++){ cin>>tasks[i]; if(tasks[i]=='1'){ ileb++; if(i!=0){ tab[i]=tab[i-1]; tab[i].b++; } else{ tab[i].b++; } } else if(tasks[i]=='2'){ ilez++; if(i!=0){ tab[i]=tab[i-1]; tab[i].z++; } else{ tab[i].z++; } } else{ ilew++; if(i!=0){ tab[i]=tab[i-1]; tab[i].w++; } else{ tab[i].w++; } } } long long na_ile_musi=ileb-k, ile_lacznie=ileb+ilez-k; if(ileb<=k){ //k-=ileb; if(k>ileb+ilez){ cout<<n; return 0; } cout<<n-ileb-ilez+k<<endl; return 0; } cal ile_d_p, ile_d_l, ile_s, ile_poz, ile_w; ile_w=tab[n-1]; long long spotkania_s=0,kn, spotkania_d=0 ; long long mam=-1,dr,dm,dz; for(long long i=0;i<n-2*t;i++){ if(i!=0){ ile_d_l.b=tab[i+t-1].b-tab[i-1].b; ile_d_l.z=tab[i+t-1].z-tab[i-1].z; ile_d_l.w=tab[i+t-1].w-tab[i-1].w; } else{ ile_d_l.b=tab[i+t-1].b; ile_d_l.z=tab[i+t-1].z; ile_d_l.w=tab[i+t-1].w; } long long ile_jeszce; for(long long y=i+t;y<n-t+1;y++){ ile_d_p.b=tab[y+t-1].b-tab[y-1].b; ile_d_p.z=tab[y+t-1].z-tab[y-1].z; ile_d_p.w=tab[y+t-1].w-tab[y-1].w; ile_s=tab[y-1]; ile_s.b-=tab[i+t-1].b; ile_s.z-=tab[i+t-1].z; ile_s.w-=tab[i+t-1].w; // cout<<"i: "<<i<<" y: "<<y<<" iled " <<ile_d_l.b<<' '<<ile_d_l.z<<" iledp "<<ile_d_p.b<<' '<<ile_d_p.z<<" iles " <<ile_s.b<<' '<<ile_s.z<<' '<<ile_s.w; dr=ile_d_l.b+ile_d_l.z+ile_d_p.b+ile_d_p.z;//spotkania w drodze dm=ile_w.b-ile_s.b-ile_d_l.b-ile_d_p.b;//spotkania w domu biurowe dz=ile_w.z-ile_s.z-ile_d_l.z-ile_d_p.z;//spotkania w domu zdalne // cout<<" iledlb "<<ile_d_l.b<<" iledlz "<<ile_d_l.z<<" iledpb "<<ile_d_p.b<<" iledlz " <<ile_d_l.z; // cout<<" dm: "<<dm<<" dz: "<<dz<<" dr: "<<dr<<'\n'; if(dm+dr<=k){//jesli ilosc spotkan opuszczonych i spotkan w biurze podczas bycia w domu jest mniejsza niz dozwolona //na ilu spotkaniach bedzie iles.b+iles.z kn=k-dm-dr;//ile jeszcze moze opuscic dz-=kn; if(dz<0){ dz=0; } //czas wolny l = i-1 //czas wolny p = n-1-y-t+1 mam=max(mam,i+n-1-y-t+1-dz); //cout<<"X: "<<i+n-1-y-t+1-dz<<"X\n"; //ile spotkan opusci w trakcie jazdy ile_d_l.b+ile_d_l.z+ile_d_p.b+ile_d_p.z //ile jeszcze mu zostaje spotkan do zrobienia ilew.z+ilew.b // } } } cout<<mam; } |
English