#include<bits/stdc++.h>
using namespace std;
int n, k, t, res = -1, eny, z;
string s;
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> n >> k >> t >> s;
int b = 0;
for(int i = 0; i < n; i++)
{
if(s[i] == '1') b++;
if(s[i] == '2') z++;
if(s[i] == '3') eny++;
}
if(b <= k) res = eny + b + min(k - b, z);
for(int l = 0; l < n; l++)
{
//cout << s[1] << " ";
int nb = 0, nj = 0, bb = 0, bj = 0, zb = 0, zj = 0;
if(l - t < 0 || l + t >= n) continue;
for(int i = l - t; i < l; i++)
{
if(s[i] == '3')
nj++;
else if(s[i] == '1')
bj++;
else
zj++;
}
//if(l == 2) cout << (bool)(s[1] == '3') << " " << s[1] << " sdfsdf";
for(int i = l + 1; i <= l + t; i++)
{
if(s[i] == '3')
nj++;
else if(s[i] == '1')
bj++;
else
zj++;
}
if(s[l] == '1') bb = 1;
else if(s[l] == '2') zb = 1;
else nb = 1;
for(int p = l; p < n; p++)
{
//if(l == 2 && p == 5) cout << "uwaga " << bj << " " << zj << " " << b << " " << bb << " ";
if(k - bj - zj - (b - bb - bj) >= 0)
{
//if(l == 2 && p == 5) cout << "hje";
res = max(res, eny - nb - nj + min(k - bj - zj - (b - bb - bj), z - zb - zj) + b - bb - bj);
//if(eny - nb - nj + min(k - bj - zj - (b - bb - bj), z - zb - zj) + b - bb - bj == 4) cout << l << " " << p << '\n';
}
if(p + t + 1 >= n) break;
if(s[p + 1] == '1')
{
bj--;
bb++;
}
else if(s[p + 1] == '2')
{
zj--;
zb++;
}
else
{
nj--;
nb++;
}
if(s[p + 1 + t] == '1')
bj++;
else if(s[p + 1 + t] == '2')
zj++;
else
nj++;
}
}
cout << res;
}
/*
7 0 1
3313113
1
5 2 1
31131
*/
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #include<bits/stdc++.h> using namespace std; int n, k, t, res = -1, eny, z; string s; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> k >> t >> s; int b = 0; for(int i = 0; i < n; i++) { if(s[i] == '1') b++; if(s[i] == '2') z++; if(s[i] == '3') eny++; } if(b <= k) res = eny + b + min(k - b, z); for(int l = 0; l < n; l++) { //cout << s[1] << " "; int nb = 0, nj = 0, bb = 0, bj = 0, zb = 0, zj = 0; if(l - t < 0 || l + t >= n) continue; for(int i = l - t; i < l; i++) { if(s[i] == '3') nj++; else if(s[i] == '1') bj++; else zj++; } //if(l == 2) cout << (bool)(s[1] == '3') << " " << s[1] << " sdfsdf"; for(int i = l + 1; i <= l + t; i++) { if(s[i] == '3') nj++; else if(s[i] == '1') bj++; else zj++; } if(s[l] == '1') bb = 1; else if(s[l] == '2') zb = 1; else nb = 1; for(int p = l; p < n; p++) { //if(l == 2 && p == 5) cout << "uwaga " << bj << " " << zj << " " << b << " " << bb << " "; if(k - bj - zj - (b - bb - bj) >= 0) { //if(l == 2 && p == 5) cout << "hje"; res = max(res, eny - nb - nj + min(k - bj - zj - (b - bb - bj), z - zb - zj) + b - bb - bj); //if(eny - nb - nj + min(k - bj - zj - (b - bb - bj), z - zb - zj) + b - bb - bj == 4) cout << l << " " << p << '\n'; } if(p + t + 1 >= n) break; if(s[p + 1] == '1') { bj--; bb++; } else if(s[p + 1] == '2') { zj--; zb++; } else { nj--; nb++; } if(s[p + 1 + t] == '1') bj++; else if(s[p + 1 + t] == '2') zj++; else nj++; } } cout << res; } /* 7 0 1 3313113 1 5 2 1 31131 */ |
English