#include <iostream> using namespace std; const int MX = 8008; int online_meetings[MX]; int all_meetings[MX]; int main(){ ios_base::sync_with_stdio(false); int n, m, t; cin >> n >> m >> t; string time_line; cin >> time_line; for(int i = 1; i <= n; i++){ if(time_line[i-1] == '1'){ all_meetings[i]++; } if(time_line[i-1] == '2'){ online_meetings[i] ++; all_meetings[i]++; } online_meetings[i] += online_meetings[i-1]; all_meetings[i] += all_meetings[i-1]; } int res = -1; for(int i = t+1; i <= n-t; i++){ for(int k = i; k <= n-t; k++){ int att_meetings = all_meetings[k] - all_meetings[i-1]; int meet_to_attend = max(all_meetings[n]-m-att_meetings, 0); int meets_in_free_time = (online_meetings[i-t-1]) + (online_meetings[n] - online_meetings[k+t]); if(meet_to_attend > meets_in_free_time){ continue; } int free_time = n - (k-i+1) - 2*t; free_time -= meet_to_attend; res = max(res, free_time); } } if(max(all_meetings[n]-m,0) <= online_meetings[n]){ res = max(res, n - max((all_meetings[n]-m),0)); } cout << res << endl; 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 48 49 50 51 | #include <iostream> using namespace std; const int MX = 8008; int online_meetings[MX]; int all_meetings[MX]; int main(){ ios_base::sync_with_stdio(false); int n, m, t; cin >> n >> m >> t; string time_line; cin >> time_line; for(int i = 1; i <= n; i++){ if(time_line[i-1] == '1'){ all_meetings[i]++; } if(time_line[i-1] == '2'){ online_meetings[i] ++; all_meetings[i]++; } online_meetings[i] += online_meetings[i-1]; all_meetings[i] += all_meetings[i-1]; } int res = -1; for(int i = t+1; i <= n-t; i++){ for(int k = i; k <= n-t; k++){ int att_meetings = all_meetings[k] - all_meetings[i-1]; int meet_to_attend = max(all_meetings[n]-m-att_meetings, 0); int meets_in_free_time = (online_meetings[i-t-1]) + (online_meetings[n] - online_meetings[k+t]); if(meet_to_attend > meets_in_free_time){ continue; } int free_time = n - (k-i+1) - 2*t; free_time -= meet_to_attend; res = max(res, free_time); } } if(max(all_meetings[n]-m,0) <= online_meetings[n]){ res = max(res, n - max((all_meetings[n]-m),0)); } cout << res << endl; return 0; } |