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;

void solve() {
    int n, k, t; cin >> n >> k >> t;
    string s; cin >> s;
    
    int work = 0;
    int ans = INT_MIN;
    while (work + 2 * t <= n) {
        int len = work;
        if (work > 0) len += 2 * t;

        int types_in[4] = {0};
        int types_out[4] = {0};
        int types_travel[4] = {0};

        int l = 0, r = len - 1;
        for (int i = 0; i < n; i++) {
            if (work > 0) {
                if (i < t) { 
                    types_travel[s[i] - '0']++;
                } else if (i >= t && i < t + work) {
                    types_in[s[i] - '0']++;
                } else if (i >= t + work && i < work + 2 * t) {
                    types_travel[s[i] - '0']++;
                } else {
                    types_out[s[i] - '0']++;
                }
            } else {
                types_out[s[i] - '0']++;
            }
        }
        while (r < n) {
            // Check if condition met.
            int avoided = types_travel[1] + types_travel[2] + types_out[1];
            if (avoided <= k) {
                int available = k - avoided;
                ans = max(ans, types_out[3] + types_out[1] + min(available, types_out[2]));
            }
            // Transition.
            types_travel[s[l] - '0']--;
            types_out[s[l] - '0']++;
            types_in[s[l + t] - '0']--;
            types_travel[s[l + t] - '0']++;
            l++;

            r++;
            if (r < n) {
                types_travel[s[r] - '0']++;
                types_out[s[r] - '0']--;
                types_in[s[r - t] - '0']++;
                types_travel[s[r - t] - '0']--;
            }
            if(work == 0) break;
        }
        work++;
    }
    cout << (ans == INT_MIN ? -1 : ans) << "\n";
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    solve();
}