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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);

    // freopen("input.in", "r", stdin);
    //freopen("output.out", "w", stdout);
    
    int n, k, t;
    cin >> n >> k >> t;
    string a;
    cin >> a;
    
    vector<int> plokalne(n + 1, 0);
    vector<int> pzdalne(n + 1, 0);
    
    for (int i=0; i<n; i++) {
        plokalne[i+1]=plokalne[i]+(a[i]=='1');
        pzdalne[i+1]=pzdalne[i]+(a[i]=='2');
    }


    
    int il_spotkan_wymag=max(pzdalne[n]+plokalne[n]-k,0);
    
    //Nie jedziemy do pracy
    if (pzdalne[n]>=il_spotkan_wymag){
        cout<<n-il_spotkan_wymag;
        return 0;
    }

    int il_spotk=0;
    int wynik=-1;
    int il_spotkan_d,il_spotkan_b;
    for(int i=1;i<=n-t;i++){
        for (int j=i+t;j+t+1<=n+1;j++){
            //1 przedzial
            // 0 do i-1 wlacznie
            il_spotkan_d=pzdalne[i-1];

            //2 przedzial 2h 3
            // i+t do j
            il_spotkan_b=pzdalne[j]-pzdalne[i+t-1];
            il_spotkan_b+=plokalne[j]-plokalne[i+t-1];

            //3 przedzial 2h 5
            // j+t+1 do n
            il_spotkan_d+=pzdalne[n]-pzdalne[j+t+1-1];
            if (il_spotkan_d+il_spotkan_b>=il_spotkan_wymag){
                int il_spotkan_wymag_dom=max(il_spotkan_wymag-il_spotkan_b,0);
                int il_czas_dom=i-1+(n-(j+t+1)+1);
                wynik=max(wynik,il_czas_dom-il_spotkan_wymag_dom);
            }
        }
    }

    cout<<wynik<<"\n";
    
    
    return 0;
}