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
#include <stdio.h>
#include <vector>
using namespace std;

int main() {
  int n, k, t; 
  char a[8013];
	scanf("%d %d %d %s" ,&n, &k, &t, a);
	vector<int> s[4];
	s[1] = s[2] = s[3] = vector<int>(1, 0);
	for (int i = 0; i < n; i++) {
		s[1].push_back(s[1].back());
		s[2].push_back(s[2].back());
		s[3].push_back(s[3].back());
		s[a[i]-'0'].back()++;
	}
	int ret = -1;
	if (s[1].back() <= k) {
		if(s[1].back() + s[2].back() <= k) ret = n;
		else ret = s[3].back() + k;
	}	
	for (int i = t; i < n; i++) for (int j = i; j + t < n; j++) {
		// w biurze od i do j włącznie
		int op_1 = s[1].back() - (s[1][j+1] - s[1][i]);
		if (op_1 > k) continue;
		int sam_2 = s[2][i]-s[2][i-t] + (s[2][j+t+1] - s[2][j+1]);
		int dom_2 = s[2][i-t] + (s[2].back() - s[2][j+t+1]);
		if (op_1 + sam_2 > k) continue;
		if (op_1 + sam_2 + dom_2 <= k) ret = std::max(ret, i-t + n-(j+t+1));
		else ret = std::max(ret, i-t + n-(j+t+1) - (op_1 + sam_2 + dom_2 - k));
	}
	printf("%d\n", ret);
	return 0;
}