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
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>

using namespace std;

const int N = 8007;
int ile[5][N];

int main() {
    int n, k, t;
    char c;
    cin >> n >> k >> t;
    for (int i = 1; i <= n; i++) {
        cin >> c;
        for (int j = 1; j <= 3; j++)
            ile[j][i] = ile[j][i - 1];
        ile[c - '0'][i]++;
    }
    k = max(0, ile[1][n] + ile[2][n] - k);
    int best = -1;
    if (ile[2][n] >= k) {
        best = n - k;
    }
    for (int l = t + 1; l <= n; l++) {
        for (int r = l; r + t <= n; r++) {
            int wbiurze = ile[1][r] - ile[1][l - 1] + ile[2][r] - ile[2][l - 1];
            int wdomu = ile[2][l - t - 1] + ile[2][n] - ile[2][r + t];
            if (wbiurze + wdomu < k) {
                continue;
            }
            best = max(best, n - 2 * t - (r - l + 1) - max(k - wbiurze, 0));
        }
    }
    cout << best;

    return 0;
}