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
#include <bits/stdc++.h>
using namespace std;

const int mn = 8003;

int n,k,t;
char tab[mn];
int zdalpref[mn], biurpref[mn], nicpref[mn];

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin>>n>>k>>t;
    for (int i = 1; i <= n; i++){
        cin>>tab[i];
        biurpref[i] = (tab[i] == '1');
        zdalpref[i] = (tab[i] == '2');
        nicpref[i] = (tab[i] == '3');
        biurpref[i] += biurpref[i-1];
        zdalpref[i] += zdalpref[i-1];
        nicpref[i] += nicpref[i-1];
    }
    int wyn = -1;
    if (biurpref[n] <= k) wyn = nicpref[n] + min(k, zdalpref[n]+biurpref[n]);
    for (int i = 1; i <= n-2*t+1; i++){
        for (int j = i+t; j <= n-t+1; j++){
            int newk = k;
            newk -= biurpref[i+t-1] - biurpref[i-1];
            newk -= zdalpref[i+t-1] - zdalpref[i-1];
            newk -= biurpref[j+t-1] - biurpref[j-1];
            newk -= zdalpref[j+t-1] - zdalpref[j-1];
            if (newk < biurpref[i-1]+biurpref[n]-biurpref[j+t-1]) continue;
            // cout<<i<<" "<<j<<" "<<newk<<" "<<min(zdalpref[i-1]+zdalpref[n]-zdalpref[j+t-1], newk) + nicpref[i-1] + nicpref[n] - nicpref[j+t-1]<<"\n";
            wyn = max(wyn, min(zdalpref[i-1]+zdalpref[n]-zdalpref[j+t-1]+biurpref[i-1]+biurpref[n]-biurpref[j+t-1], newk) + nicpref[i-1] + nicpref[n] - nicpref[j+t-1]);
        }
    }
    cout<<wyn<<"\n";
}