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
#include <cstdio>
#include <algorithm>
using namespace std;

int main()
{
  int n, k, t, l = 0, r = 0, m = -1;
  scanf("%i %i %i ", &n, &k, &t);
  int L[n+1], R[n+1];
  for (int i = 0; i<n; i++)
  {
    L[i] = l, R[i] = r;
    int c = getchar();
    c=='1'? l++: c=='2'? r++: 0;
  }
  L[n] = l, R[n] = r;
  if (l<=k)
  {
    printf("%i\n", n-max(r+l-k, 0));
    return 0;
  }
  for (int i = 0; i<=n-2*t-1; i++)
  for (int j = i+2*t+1; j<=n; j++)
  {
    int o = l-L[j-t]+L[i+t] + R[j]-R[j-t]+R[i+t]-R[i];
    if (o<=k) m = max(m, n-j+i-max(r-R[j]+R[i]+o-k, 0));
  }
  printf("%i\n", m);
  return 0;
}