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
#include <stdio.h>

int n,k,t;
char tab[8001];
char tabk1[8001];
char tabk2[8001];
int k0,k1=0,k2=0;

int check(int b, int e)
{
int kd, kp;
kp =tabk1[e-1]-tabk1[b+t-1];
kp+=tabk2[e-1]-tabk2[b+t-1];
kd =tabk2[b-1];
kd+=tabk2[n]-tabk2[e+t-1]; 
int r= kp+kd>=k0?n-(e+t-1)+(b-1)-kd:-1;
if(kp>=k0)
{
  r=n-(e+t-1)+(b-1); 
}
else
if (kp+kd>=k0)
{
  r=n-(e+t-1)+(b-1)-kd-(kp+kd-k0); 
}
else r=-1;
return r;
}

int main()
{
int i,j,max,x;
scanf ("%d %d %d",&n,&k,&t);
scanf("%s",&tab[0]);
tabk1[0]=0; 
tabk2[0]=0; 
for(i=0;i<n;i++)
{
  if(tab[i]=='1') k1++;
  if(tab[i]=='2') k2++;
  tabk1[i+1]=k1; 
  tabk2[i+1]=k2; 
}
k0=k1+k2-k>=0?k1+k2-k:0;
max=k2>=k0?n-k0:-1;
for(i=1;i<=n-t-t+1;i++)
 for(j=i+t;j<=n-t+1;j++)
 {
   x=check(i,j);
   if(x>max)max=x;
 }
printf("%d\n",max);
return 0;
}