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
83
84
85
86
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
int T[8005];
int D[8005];
bool vis[8005];
bool sp[8005];
bool biur[8005];
int SPVIS[8005];
int SPSP[8005];
int SPBIUR[8005];
bool dom[8005];
int SPDOM[8005];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
 int n , k , t;
 cin >> n >> k >> t;
 string dzien;
 cin >> dzien;
 int biuro = 0;
 for(int i = 0 ; i < dzien.size();++i)
    D[i+1]=dzien[i]-48;
 int N = dzien.size();
 for( int i = 1 ; i<=n ; ++i)
 {
     if(D[i]==3)
        vis[i]=1;
 }
 for( int i = 1 ; i<=n ; ++i)
 {
     if(D[i]==2||D[i]==1)
        sp[i]=1;
    if(D[i]==1)
        biur[i]=1;
    if(D[i]==2)
        dom[i]=1;
 }
 for( int i = 1 ; i <=n ; ++i)
 {
     SPVIS[i]=SPVIS[i-1]+vis[i];
 }
 for( int i = 1 ; i <=n ; ++i)
 {
     SPDOM[i]=SPDOM[i-1]+dom[i];
 }
 for( int i = 1 ; i <=n ; ++i)
 {
     SPSP[i]=SPSP[i-1]+sp[i];
 }
 for( int i = 1 ; i <=n ; ++i)
 {
     SPBIUR[i]=SPBIUR[i-1]+biur[i];
 }
 int maxspot = 0;
 int maxh = -1;
 int gg = 0;
 int dd = 0 ;
 int xve=0;
 int domdd = 0;
for(int i = 1 ; i + t + t <=n ; ++i)
{
    for(int j = i + t + 1 ; j+t-1<=n;++j)
    {
        //cout << " i "<< i << " j " << j <<"\n";
        //gg = SPVIS[n]-(SPVIS[i+t-1]-SPVIS[i-1])-(SPVIS[j+t-1]-SPVIS[j-1]);
        dd = (SPSP[i+t-1]-SPSP[i-1])+(SPSP[j+t-1]-SPSP[j-1]);
        domdd=SPBIUR[i-1]+(SPBIUR[n]-SPBIUR[j+t-1]);

        //cout << "dd " <<  dd << " domdd " << domdd<<"\n";
        if(dd+domdd<=k)
        {
            xve=min(n,n-t-t-SPSP[n]+dd+(k-dd)-(j-(i+t)-(SPSP[j-1]-SPSP[i+t-1])));
            maxh = max(maxh,xve);

            //cout << "xve " << xve << " "<< maxh << "\n";
        }
    }
}
if(SPBIUR[n]<=k)
{maxh = min(n,n-SPSP[n]+k);}
cout << maxh;
}