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
72
73
74
75
76
77
78
79
80
81
82
#include<bits/stdc++.h>
using namespace std;
const int biuro = 49;
const int home = 50;
const int nothing = 51;
int n,k,t;
string s;
int biuroLewo[8001];
int zdalneLewo[8001];

int wynik(int l, int p)
{
    int pominieteLewo = biuroLewo[l];
    pominieteLewo += (biuroLewo[l+t]-biuroLewo[l]) + (zdalneLewo[l+t]-zdalneLewo[l]);
    int pominietePrawo = biuroLewo[n]-biuroLewo[p+t];
    // cerr<<"pominietePrawo1: "<<pominietePrawo;
    pominietePrawo += (biuroLewo[p+t]-biuroLewo[p]) + (zdalneLewo[p+t]-zdalneLewo[p]);
    int pominiete = pominieteLewo + pominietePrawo;
    // cerr<<" pominieteLewo: "<<pominieteLewo<<" pominietePrawo: "<<pominietePrawo;
    if(pominiete>k)
    {
        // cerr<<endl;
        return -1;
    }
    else 
    {
        int zdalneDoPominiecia = zdalneLewo[l] + zdalneLewo[n] - zdalneLewo[p+t];
        int dodatkoweGodziny = min(zdalneDoPominiecia,(k-pominiete));
        // cerr<<" zdalneDoPominiecia: "<<zdalneDoPominiecia<<" dodatkoweGodziny: "<<dodatkoweGodziny<<endl;
        return n - (p-l+t) + dodatkoweGodziny - zdalneDoPominiecia;
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin>>n>>k>>t>>s;
    biuroLewo[0]=0;
    zdalneLewo[0]=0;
    for(int i=1;i<=n;i++)
    {
        zdalneLewo[i]=zdalneLewo[i-1];
        biuroLewo[i]=biuroLewo[i-1];
        switch(s[i-1])
        {

            case biuro: 
                biuroLewo[i]++;
                break;        
            case home: 
                zdalneLewo[i]++;
                break;
            case nothing:
                break;
        }
    }
    // for(int i=0;i<=n;i++)
    //     cerr<<zdalneLewo[i]<<" ";
    // cerr<<endl;
    // for(int i=0;i<n;i++)
    //     cerr<<biuroLewo[i]<<" ";
    // cerr<<endl;

    if(biuroLewo[n]<=k)
    {
        cout<<min(k-biuroLewo[n], zdalneLewo[n])+n-zdalneLewo[n]<<endl;
        return 0;
    }

    int w=-1;
    for(int i=0;i<n-2*t;i++)
    {
        for(int j=i+t+1;j<n-t+1;j++)
        {
            int wtemp = wynik(i,j);
            // cerr<<i<<" "<<j<<" "<<wtemp<<endl;;
            w=max(wtemp,w);
        }
    }
    cout<<w<<endl;
    return 0;
}