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