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

const int mn = 1000007;
int tab[mn];
int biu[mn];
int spo[mn];
int zad[mn];
int main(){
    int n, k, t;
    cin>>n>>k>>t;
    string s;
    cin>>s;
    for (int i = 0; i<n; i++){
        tab[i+1] = s[i]-'0';
    }
    for(int i = 1; i<=n; i++){
        if(tab[i] == 1){
            biu[i]++;
            spo[i]++;
        }
        if(tab[i] == 2){
            spo[i]++;
        }
        if(tab[i] == 3){
            zad[i]++;
        }
        zad[i]+=zad[i-1];
        biu[i]+=biu[i-1];
        spo[i]+=spo[i-1];
    }
    int wyn = -1, x = 0;
    //for (int i = 1; i<=n; i++){
    //    cout<<zad[i]<<" "<<biu[i]<<" "<<spo[i]<<"\n";
    //}
    for (int i = 1; i<=(n-t); i++){
        for (int j = i+t; j<=(n-t+1); j++){
            //cerr<<i<<" "<<j<<"\n";
            x = (spo[i+t-1]-spo[i-1]+spo[j+t-1]-spo[j-1]+biu[n]-biu[j+t-1]+biu[i-1]);
            if(x <= k){
                wyn = max(wyn, zad[i-1]+zad[n]-zad[j+t-1]+min((k-x), n-t*2));
            }
        }
    }
    cout<<wyn<<"\n";
}