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
67
68
69
70
71
#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n, k, t;
    int fo = -1, lo, mio = 0, m = 0, mr = 0;
    cin >> n >> k >> t;
    vector<int> prefix_m(n);
    vector<int> prefix_mio(n);
    vector<int> prefix_mr(n);
    string str;
    cin >> str;
    for (int i = 0; i < n; i++)
    {
        if (str[i] == '1' || str[i] == '2')
            m++;
        if (str[i] == '1')
        {
            mio++;
            if (fo == -1)
                fo = i;
            lo = i;
        }
        if (str[i] == '2')
            mr++;
        prefix_m[i] = m;
        prefix_mio[i] = mio;
        prefix_mr[i] = mr;
    }
    // for (auto p : prefix_mr)
    // {
    //     cout << p << " ";
    // }
    // cout << endl;
    // for (auto p : prefix_mio)
    // {
    //     cout << p << " ";
    // }
    // cout << endl;
    if (m <= k)
    {
        cout << n << endl;
        return 0;
    }
    if (mio <= k)
    {
        cout << n - (m - k) << endl;
        return 0;
    }
    int res = -1;
    int e;
    for (int i = 0; i < n; i++)
    {
        if (i + t > n)
            break;
        for (int j = i + t; j < n; j++)
        {
            if (j + t > n)
                break;
            e = 0;
            e = prefix_mio[i + t - 1] + prefix_mr[i + t - 1] - (i ? prefix_mr[i - 1] : 0) + prefix_mio[n-1] - prefix_mio[j-1] + prefix_mr[j + t - 1] - prefix_mr[j-1];
            if(e <= k){
                res = max(res, n - (j + t - i) - (mr - (prefix_mr[j+t-1] - prefix_mr[i])) + (k - e));
                // cout << e << " " << i << " " << j << endl;
            } 
        }
    }
    cout << res;
}