#include<bits/stdc++.h>
using namespace std;
const int MAXN = 8000 + 17;
int spref[4][MAXN];
string s;
int main () {
ios::sync_with_stdio(); cin.tie(0); cout.tie(0);
int n, k, t;
cin >> n >> k >> t >> s;
for (int i = 1; i <= n; i ++) {
for (int j = 1; j <= 3; j ++) {
spref[j][i] = spref[j][i - 1];
}
spref[int(s[i - 1]) - int('0')][i] ++;
}
int wyn = -1;
for (int i = t + 1; i <= n; i ++) {
for (int j = i; j <= n - t; j ++) {
int ile = 0;
ile += (spref[1][j + t] - spref[1][j]);
ile += (spref[2][j + t] - spref[2][j]);
ile += (spref[1][i - 1] - spref[1][i - t - 1]);
ile += (spref[2][i - 1] - spref[2][i - t - 1]);
ile += (spref[1][i - t - 1]);
ile += (spref[1][n] - spref[1][j + t]);
if (ile <= k) {
int akt = 0;
akt += (spref[3][i - t - 1]);
akt += (spref[3][n] - spref[3][j + t]);
akt += (spref[1][i - t - 1]);
akt += (spref[1][n] - spref[1][j + t]);
int dodatek = 0;
dodatek += (spref[2][i - t - 1]);
dodatek += (spref[2][n] - spref[2][j + t]);
wyn = max(wyn, akt + min(dodatek, k - ile));
}
}
}
int liczbaspotkan = spref[1][n] + spref[2][n];
if (liczbaspotkan - spref[2][n] <= k) {
wyn = max(wyn, n - max(0, (liczbaspotkan - k)));
}
cout << wyn << "\n";
return 0;
}
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 | #include<bits/stdc++.h> using namespace std; const int MAXN = 8000 + 17; int spref[4][MAXN]; string s; int main () { ios::sync_with_stdio(); cin.tie(0); cout.tie(0); int n, k, t; cin >> n >> k >> t >> s; for (int i = 1; i <= n; i ++) { for (int j = 1; j <= 3; j ++) { spref[j][i] = spref[j][i - 1]; } spref[int(s[i - 1]) - int('0')][i] ++; } int wyn = -1; for (int i = t + 1; i <= n; i ++) { for (int j = i; j <= n - t; j ++) { int ile = 0; ile += (spref[1][j + t] - spref[1][j]); ile += (spref[2][j + t] - spref[2][j]); ile += (spref[1][i - 1] - spref[1][i - t - 1]); ile += (spref[2][i - 1] - spref[2][i - t - 1]); ile += (spref[1][i - t - 1]); ile += (spref[1][n] - spref[1][j + t]); if (ile <= k) { int akt = 0; akt += (spref[3][i - t - 1]); akt += (spref[3][n] - spref[3][j + t]); akt += (spref[1][i - t - 1]); akt += (spref[1][n] - spref[1][j + t]); int dodatek = 0; dodatek += (spref[2][i - t - 1]); dodatek += (spref[2][n] - spref[2][j + t]); wyn = max(wyn, akt + min(dodatek, k - ile)); } } } int liczbaspotkan = spref[1][n] + spref[2][n]; if (liczbaspotkan - spref[2][n] <= k) { wyn = max(wyn, n - max(0, (liczbaspotkan - k))); } cout << wyn << "\n"; return 0; } |
English