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
#include <bits/stdc++.h>
using namespace std;
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int n, k, m; cin>>n>>k>>m;
	string s; cin>>s;
	vector<int> a(n+1), b(n+1), c(n+1);
	for (int i=1; i<=n; i++)
	{
		if (s[i-1] == '1') a[i]++;
		if (s[i-1] == '2') b[i]++;
		if (s[i-1] == '3') c[i]++;
		a[i] += a[i-1];
		b[i] += b[i-1];
		c[i] += c[i-1];
	}
	int ans = -1, all = a[n] + b[n];
	if (b[n] >= all - k)
	{
		ans = n - max(0, (all - k));
	}
	for (int i=1; i<=n; i++)
	{
		for (int j=i+2*m; j<=n+1; j++)
		{
			int meet = (a[j-m-1] - a[i+m-1]) + (b[j-m-1] - b[i+m-1]);
			int left = b[i-1] + (b[n] - b[j-1]);
			int rem = max(0, all - meet - k);
			int leng = (i-1) + (n - j + 1);
			//~ cout<<i<<" "<<j<<" "<<all<<" "<<meet<<" "<<left<<" "<<rem<<" "<<leng<<" "<<ans<<endl;
			if (left >= rem)
			{
				ans = max(ans, leng - rem);
			}
		}
	}
	cout<<ans<<"\n";
}