#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 */ |