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
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
#define ll long long
#define pii pair<int, int>
#define pb push_back
const int s = 8'005;
int praca[s], dom[s];
void f() {
    //input
    int n, maxi, t; cin >> n >> maxi >> t;
    string a, b; cin >> b; a = '0' + b;
    t--;
    //preprocess
    for (int i = 1; i <= n; i++) {
        praca[i] = praca[i - 1];
        if (a[i] == '1') praca[i]++;
        dom[i] = dom[i - 1];
        if (a[i] == '2') dom[i]++;
    }
    //kazdy poczatek i koniec
    int ans = -1;
    for (int l = 1; l <= n; l++) {
        for (int r = l + 1; r <= n - t; r++) {
            if (l + t >= r || r + t > n) continue;
            int k = maxi, k1 = maxi;
            k -= praca[l + t];
            k -= praca[n] - praca[r - 1];
            k -= dom[l + t] - dom[l - 1] + dom[r + t] - dom[r - 1];
            //zadania w biurze nie
            int comp = l - 1 + n - (r + t);
            int summ = dom[l - 1] + dom[n] - dom[r + t];
            if (k >= 0) ans = max(ans, comp - max(summ - k, 0));
        }
    }
    //case bez pracy
    int k = maxi - praca[n];
    if (k >= 0) ans = max(ans, n - max(0, dom[n] + praca[n] - maxi));
    //output
    cout << ans;
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    f();
}