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

#define pb push_back
typedef long long LL;

using namespace std;

const int N = 8010;

int pref3[N];
int pref2[N];
int pref1[N];
int pref12[N];
int tab[N];

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int n, k, t;
    cin >> n >> k >> t;
    int spotkania = 0;
    for(int i=1;i<=n;i++)
    {
        char x;
        cin >> x;
        if(x=='1') tab[i] = 1;
        if(x=='2') tab[i] = 2;
        if(x=='3') tab[i] = 3;
        spotkania += (tab[i] == 1) + (tab[i] == 2);

        pref1[i] = pref1[i-1] + (tab[i] == 1);
        pref2[i] = pref2[i-1] + (tab[i] == 2);
        pref3[i] = pref3[i-1] + (tab[i] == 3);
        pref12[i] = pref12[i-1] + (tab[i] == 2) + (tab[i]==1);
      //  cout << pref12[i] << " ";
    }
  //  cout << endl;

    int res = -1;
    for(int i=1;i+t-1<=n;i++)
    {
        for(int j=i+t;j+t-1<=n;j++)
        {
            int ilespotkanI = pref12[i+t-1] - pref12[i-1];
            int ilespotkanJ = pref12[j+t-1] - pref12[j-1];
            int ile1 = pref3[i-1] + pref3[n] - pref3[j+t-1];
            int ile2 = pref12[i-1] + pref12[n] - pref12[j+t-1];

            int ile11 = pref1[i-1] + pref1[n] - pref1[j+t-1];

            //cout << i << " " << i+t-1 << " : " << j << " " << j+t-1 << endl;
              //  cout << ilespotkanI << " " << ilespotkanJ << " " << ile1 << " " << ile2 << endl;
            int k1 = k - ilespotkanI - ilespotkanJ;
            if(k1 < 0) continue;
            if(k1 - ile11 < 0) continue;
            res = max(res, ile1 + min(k1, ile2));


        }
    }

    int k1 = k - pref1[n];
    if(k1 >= 0) res = max(res,  pref3[n] + pref1[n] + min(pref2[n], k1));

    cout << res;

}