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 <bits/stdc++.h>

#define ll long long
#define vi std::vector<int>
#define pi std::pair<int, int>

int prefix[8002][3];

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

    int n, k, t;
    std::cin >> n >> k >> t;

    char znak;

    for(int i = 1; i <= n; i++) {
        std::cin >> znak;
        prefix[i][0] = prefix[i-1][0];
        prefix[i][1] = prefix[i-1][1];
        prefix[i][2] = prefix[i-1][2];
        if(znak == '1')
            prefix[i][0]++;
        else if(znak == '2')
            prefix[i][1]++;
        else
            prefix[i][2]++;
    }

    prefix[n + 1][0] = prefix[n][0];
    prefix[n + 1][1] = prefix[n][1];
    prefix[n + 1][2] = prefix[n][2];

    int max = -1, x;
    for(int a = 1; a <= n; a++)
        for(int b = a + 2 * t - 1; b <= n; b++) {
            x = prefix[a + t - 1][1] - prefix[a - 1][1] + prefix[a + t - 1][0] + prefix[n][0] - prefix[b - t][0] + prefix[b][1] - prefix[b-t][1]; // prefix[2][1] - prefix[0][1] + prefix[2][0] + prefix[10][0] - prefix[2][0] + prefix[4][1] - prefix[2][1], a = 1, b = 4
            if(x <= k)                                                                                                                            // (1, 2)[1] + (0, 2)[0] + (3, 10)[0] + (3, 4)[1]
                max = std::max(max, std::min(k-x, prefix[a-1][1] + prefix[n][1] - prefix[b][1] + prefix[a-1][0] + prefix[n][0] - prefix[b][0]) + prefix[a-1][2] + prefix[n][2] - prefix[b][2]); //(0, 3)[2] + (9, 10)[2]
        }

    if(prefix[n][0] <= k)
        max = std::max(max, std::min(k-prefix[n][0], prefix[n][1] + prefix[n][0]) + prefix[n][2]);
    std::cout << max;
}