#include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, k, t; cin >> n >> k >> t; string s; cin >> s; vector <int> dp1(n+1), dp2(n+1), dp3(n+1); for (int i = 0; i < n; i++) { if (s[i] == '1') dp1[i+1]++; if (s[i] == '2') dp2[i+1]++; if (s[i] == '3') dp3[i+1]++; dp1[i+1] += dp1[i]; dp2[i+1] += dp2[i]; dp3[i+1] += dp3[i]; } int best = -1; for (int i = 0; i < n-t; i++) { // wyjazd z domu for (int j = i+t; j <= n-t; j++) { // wyjazd z biura int pom = 0; pom += dp1[i] - dp1[0]; pom += dp1[i+t] - dp1[i]; pom += dp2[i+t] - dp2[i]; pom += dp1[j+t] - dp1[j]; pom += dp2[j+t] - dp2[j]; pom += dp1[n] - dp1[j+t]; // cout << i << " " << j << " " << pom << "\n"; if (pom > k) continue; int gra = 0; gra += dp3[i] - dp3[0]; gra += dp1[i] - dp1[0]; gra += dp3[n] - dp3[j+t]; gra += dp1[n] - dp1[j+t]; int dod = 0; dod += dp2[i] - dp2[0]; dod += dp2[n] - dp2[j+t]; gra += min(k-pom, dod); best = max(best, gra); } } [&]() { // zostaje w domu int pom = dp1[n] - dp1[0]; if (pom <= k) { int gra = 0; gra += dp3[n] - dp3[0]; gra += dp1[n] - dp1[0]; int dod = dp2[n] - dp2[0]; gra += min(k - pom, dod); best = max(best, gra); } }(); cout << best << "\n"; }
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 | #include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, k, t; cin >> n >> k >> t; string s; cin >> s; vector <int> dp1(n+1), dp2(n+1), dp3(n+1); for (int i = 0; i < n; i++) { if (s[i] == '1') dp1[i+1]++; if (s[i] == '2') dp2[i+1]++; if (s[i] == '3') dp3[i+1]++; dp1[i+1] += dp1[i]; dp2[i+1] += dp2[i]; dp3[i+1] += dp3[i]; } int best = -1; for (int i = 0; i < n-t; i++) { // wyjazd z domu for (int j = i+t; j <= n-t; j++) { // wyjazd z biura int pom = 0; pom += dp1[i] - dp1[0]; pom += dp1[i+t] - dp1[i]; pom += dp2[i+t] - dp2[i]; pom += dp1[j+t] - dp1[j]; pom += dp2[j+t] - dp2[j]; pom += dp1[n] - dp1[j+t]; // cout << i << " " << j << " " << pom << "\n"; if (pom > k) continue; int gra = 0; gra += dp3[i] - dp3[0]; gra += dp1[i] - dp1[0]; gra += dp3[n] - dp3[j+t]; gra += dp1[n] - dp1[j+t]; int dod = 0; dod += dp2[i] - dp2[0]; dod += dp2[n] - dp2[j+t]; gra += min(k-pom, dod); best = max(best, gra); } } [&]() { // zostaje w domu int pom = dp1[n] - dp1[0]; if (pom <= k) { int gra = 0; gra += dp3[n] - dp3[0]; gra += dp1[n] - dp1[0]; int dod = dp2[n] - dp2[0]; gra += min(k - pom, dod); best = max(best, gra); } }(); cout << best << "\n"; } |