#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"; } |
English