#include <bits/stdc++.h>
using namespace std;
#define int long long
vector<int> conv;
int prefix_of_meetings[8009];
int prefix_of_house[8009];
int prefix_of_office[8009];
int prefix_of_freetime[8009];
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,k,t;
cin >> n >> k >> t;
string way;
cin >> way;
//sigma conversation no ligma char
conv.push_back(-1);
int counter = 0;
int spotkania = 0;
for(auto x: way){
if(x == '1'){
conv.push_back(1);
counter++;
}
if(x == '2'){
conv.push_back(2);
spotkania++;
}
if(x == '3'){
conv.push_back(3);
}
}
for(int i = 1; i<=n; i++){
prefix_of_meetings[i] = prefix_of_meetings[i - 1];
prefix_of_freetime[i] = prefix_of_freetime[i-1];
prefix_of_house[i] = prefix_of_house[i-1];
prefix_of_office[i] = prefix_of_office[i-1];
if(conv[i] == 1 or conv[i] == 2){
prefix_of_meetings[i]++;
if(conv[i] == 2){
prefix_of_house[i]++;
}
if(conv[i] == 1){
prefix_of_office[i]++;
}
}else{
prefix_of_freetime[i]++;
}
}
int best = -1;
for(int start = 1; start<=n; start++){
for(int end = start+2*t; end <= n; end++){
int missed = prefix_of_meetings[start+t-1] - prefix_of_meetings[start-1] + prefix_of_meetings[end]-prefix_of_meetings[end-t] + prefix_of_office[start-1] + prefix_of_office[n] - prefix_of_office[end];
int b = prefix_of_office[start-1] + prefix_of_office[n] - prefix_of_office[end];
if(missed <= k){
int left = k-missed;
int extra = max(min(left, spotkania-missed),(long long)0);
int free_time = prefix_of_freetime[start-1] + prefix_of_freetime[n] - prefix_of_freetime[end] + b;
best = max(best, free_time+extra);
}
}
}
if(counter <= k){
int bonus = (k-counter);
bonus = min(bonus,prefix_of_house[n]);
best = max(best, prefix_of_freetime[n] + bonus + counter);
}
cout << best << "\n";
}
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 | #include <bits/stdc++.h> using namespace std; #define int long long vector<int> conv; int prefix_of_meetings[8009]; int prefix_of_house[8009]; int prefix_of_office[8009]; int prefix_of_freetime[8009]; int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,k,t; cin >> n >> k >> t; string way; cin >> way; //sigma conversation no ligma char conv.push_back(-1); int counter = 0; int spotkania = 0; for(auto x: way){ if(x == '1'){ conv.push_back(1); counter++; } if(x == '2'){ conv.push_back(2); spotkania++; } if(x == '3'){ conv.push_back(3); } } for(int i = 1; i<=n; i++){ prefix_of_meetings[i] = prefix_of_meetings[i - 1]; prefix_of_freetime[i] = prefix_of_freetime[i-1]; prefix_of_house[i] = prefix_of_house[i-1]; prefix_of_office[i] = prefix_of_office[i-1]; if(conv[i] == 1 or conv[i] == 2){ prefix_of_meetings[i]++; if(conv[i] == 2){ prefix_of_house[i]++; } if(conv[i] == 1){ prefix_of_office[i]++; } }else{ prefix_of_freetime[i]++; } } int best = -1; for(int start = 1; start<=n; start++){ for(int end = start+2*t; end <= n; end++){ int missed = prefix_of_meetings[start+t-1] - prefix_of_meetings[start-1] + prefix_of_meetings[end]-prefix_of_meetings[end-t] + prefix_of_office[start-1] + prefix_of_office[n] - prefix_of_office[end]; int b = prefix_of_office[start-1] + prefix_of_office[n] - prefix_of_office[end]; if(missed <= k){ int left = k-missed; int extra = max(min(left, spotkania-missed),(long long)0); int free_time = prefix_of_freetime[start-1] + prefix_of_freetime[n] - prefix_of_freetime[end] + b; best = max(best, free_time+extra); } } } if(counter <= k){ int bonus = (k-counter); bonus = min(bonus,prefix_of_house[n]); best = max(best, prefix_of_freetime[n] + bonus + counter); } cout << best << "\n"; } |
English