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