#include <bits/stdc++.h>
using namespace std;
#define loop(i, a, b) for(int i = a; i <= b; i++)
#define loop_rev(i, a, b) for(int i = a; i >= b; i--)
#define all(x) x.begin(), x.end()
#define sz(x) int(x.size())
#define eb emplace_back
#define pb push_back
using ui = uint32_t;
using ll = int64_t;
int main() {
cin.tie(0)->sync_with_stdio(0);
int n, k, t; cin >> n >> k >> t;
vector<vector<int>> s(n + 1);
vector<int>(3).swap(s[0]);
auto suma = [&](int a, int b, int typ) -> int {
return s[b][typ] - s[a - 1][typ];
};
loop(i, 1, n) {
s[i] = s[i - 1];
char c; cin >> c;
++s[i][c - '1'];
}
constexpr int BIURO = 0;
constexpr int ZDALNIE = 1;
constexpr int LABA = 2;
int res = (-1);
loop(a, 1, n) {
loop(b, a - 1, n) {
if(a - t < 1 || b + t > n) continue;
int skip_biuro = suma(1, n, BIURO) - suma(a, b, BIURO);
int skip_zdalnie = suma(a - t, b + t, ZDALNIE) - suma(a, b, ZDALNIE);
int laba = suma(1, n, LABA) - suma(a - t, b + t, LABA);
int pozostale = (k - skip_biuro - skip_zdalnie);
if(pozostale < 0) continue;
res = max(
res,
min(pozostale, suma(1, a - t - 1, ZDALNIE) + suma(b + t + 1, n, ZDALNIE))
+ suma(1, a - t - 1, BIURO) + suma(b + t + 1, n, BIURO)
+ laba
);
}
}
if(s[n][BIURO] <= k) {
int tres = s[n][LABA] + s[n][BIURO] + min(k - s[n][BIURO], s[n][ZDALNIE]);
if(tres > res) {
res = tres;
}
}
cout << res << '\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 | #include <bits/stdc++.h> using namespace std; #define loop(i, a, b) for(int i = a; i <= b; i++) #define loop_rev(i, a, b) for(int i = a; i >= b; i--) #define all(x) x.begin(), x.end() #define sz(x) int(x.size()) #define eb emplace_back #define pb push_back using ui = uint32_t; using ll = int64_t; int main() { cin.tie(0)->sync_with_stdio(0); int n, k, t; cin >> n >> k >> t; vector<vector<int>> s(n + 1); vector<int>(3).swap(s[0]); auto suma = [&](int a, int b, int typ) -> int { return s[b][typ] - s[a - 1][typ]; }; loop(i, 1, n) { s[i] = s[i - 1]; char c; cin >> c; ++s[i][c - '1']; } constexpr int BIURO = 0; constexpr int ZDALNIE = 1; constexpr int LABA = 2; int res = (-1); loop(a, 1, n) { loop(b, a - 1, n) { if(a - t < 1 || b + t > n) continue; int skip_biuro = suma(1, n, BIURO) - suma(a, b, BIURO); int skip_zdalnie = suma(a - t, b + t, ZDALNIE) - suma(a, b, ZDALNIE); int laba = suma(1, n, LABA) - suma(a - t, b + t, LABA); int pozostale = (k - skip_biuro - skip_zdalnie); if(pozostale < 0) continue; res = max( res, min(pozostale, suma(1, a - t - 1, ZDALNIE) + suma(b + t + 1, n, ZDALNIE)) + suma(1, a - t - 1, BIURO) + suma(b + t + 1, n, BIURO) + laba ); } } if(s[n][BIURO] <= k) { int tres = s[n][LABA] + s[n][BIURO] + min(k - s[n][BIURO], s[n][ZDALNIE]); if(tres > res) { res = tres; } } cout << res << '\n'; } |
English