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
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n, k, t, result = -1;
    cin >> n >> k >> t;
    vector<char> a(n);
    for(char &x: a) cin >> x;
    vector<int> precal_meetings(n), precal_remote_meetings(n + 1);
    int meetings = 0, remote_meetings = 0;
    for(int i = 0; i < n; i++){
        precal_remote_meetings[i] = remote_meetings;
        if(a[i] == '1') meetings++;
        else if(a[i] == '2'){
            meetings++;
            remote_meetings++;
        }
        precal_meetings[i] = meetings;
    }
    precal_remote_meetings[n] = remote_meetings;
    k = max(meetings - k, 0);
    if(remote_meetings >= k){
        cout << n - k;
        return 0;
    }
    for(int l = t; l <= n - t - 1; l++){
        for(int r = l; r <= n - t - 1; r++){
            meetings = precal_meetings[r] - precal_meetings[l - 1];
            if(meetings >= k) result = max(result, n - (r - l + 1) - 2*t);
            else {
                int extra_meetings = precal_remote_meetings[l - t] + remote_meetings - precal_remote_meetings[r + t + 1];
                if(meetings + extra_meetings >= k) result = max(result, n - (r - l + 1) - 2*t - (k - meetings));
            }
        }
    }
    cout << result;
    return 0;
}