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 <iostream>
#include <algorithm>
using namespace std;
int pref[4][8008];
int zap(int l, int r, int idx)
{
    return pref[idx][r+1]-pref[idx][l];
}
int main()
{
        int n,k,t;
        cin >>n>>k>>t;
    char a;
    for (int i=0;i<n;i++)
    {
        cin >>a;
        pref[1][i+1]=pref[1][i];
        pref[2][i+1]=pref[2][i];
        pref[3][i+1]=pref[3][i];
        pref[a-'0'][i+1]++;
    }
    if (zap(0,n-1,1)<=k)
    {
        cout <<zap(0,n-1,3)+min(k,zap(0,n-1,1)+zap(0,n-1,2));
        return 0;
    }
    int maxi=-1;
    for (int i=0;i<n-(2*t)+1;i++)
        for (int j=i+t;j<n-t+1;j++)
    {
        int wdrodz=zap(i,i+t-1,1)+zap(i,i+t-1,2)+zap(j,j+t-1,1)+zap(j,j+t-1,2);
        if (wdrodz+zap(0,i-1,1)+zap(j+t,n-1,1)>k)
            continue;
        maxi=max(maxi,zap(0,i-1,1)+zap(0,i-1,3)+zap(j+t,n-1,1)+zap(j+t,n-1,3)+min(k-wdrodz,zap(0,i-1,2)+zap(j+t,n-1,2)));
    }
    cout <<maxi;
}