#include <bits/stdc++.h>
using namespace std;
typedef int64_t ll;
typedef uint64_t ull;
typedef unsigned int ui;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<long long> vll;
constexpr ll LINF = 1e18;
constexpr int INF = 1e9;
int sum(int (*psums)[3], int start, int end, int type) {
return psums[end][type] - psums[start][type];
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, k, t;
cin >> n >> k >> t;
string tasks;
cin >> tasks;
int psums[n + 1][3] = {{0, 0, 0}};
for (int i = 0; i < n; ++i) {
for (int j = 0; j < 3; ++j) {
psums[i + 1][j] = psums[i][j];
}
++psums[i + 1][tasks[i] - '1'];
}
int best = -1;
int office_meetings_all = psums[n][0];
if (office_meetings_all <= k) {
int free_time = psums[n][2] + office_meetings_all;
free_time += min(psums[n][1], k - office_meetings_all);
best = max(free_time, best);
}
for (int start = 0; start < n; ++start) {
for (int finish = start + t; finish + t <= n; ++finish) {
int meetings_missed = sum(psums, start, start + t, 0) + sum(psums, start, start + t, 1)
+ sum(psums, finish, finish + t, 0)
+ sum(psums, finish, finish + t, 1);
int office_meetings_home = sum(psums, 0, start, 0) + sum(psums, finish + t, n, 0);
meetings_missed += office_meetings_home;
if (meetings_missed > k) {
continue;
}
int free_time = office_meetings_home + sum(psums, 0, start, 2)
+ sum(psums, finish + t, n, 2);
int remote_meetings = sum(psums, 0, start, 1) + sum(psums, finish + t, n, 1);
free_time += min(remote_meetings, k - meetings_missed);
best = max(free_time, best);
}
}
cout << best << endl;
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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #include <bits/stdc++.h> using namespace std; typedef int64_t ll; typedef uint64_t ull; typedef unsigned int ui; typedef pair<int, int> pii; typedef vector<int> vi; typedef vector<long long> vll; constexpr ll LINF = 1e18; constexpr int INF = 1e9; int sum(int (*psums)[3], int start, int end, int type) { return psums[end][type] - psums[start][type]; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, k, t; cin >> n >> k >> t; string tasks; cin >> tasks; int psums[n + 1][3] = {{0, 0, 0}}; for (int i = 0; i < n; ++i) { for (int j = 0; j < 3; ++j) { psums[i + 1][j] = psums[i][j]; } ++psums[i + 1][tasks[i] - '1']; } int best = -1; int office_meetings_all = psums[n][0]; if (office_meetings_all <= k) { int free_time = psums[n][2] + office_meetings_all; free_time += min(psums[n][1], k - office_meetings_all); best = max(free_time, best); } for (int start = 0; start < n; ++start) { for (int finish = start + t; finish + t <= n; ++finish) { int meetings_missed = sum(psums, start, start + t, 0) + sum(psums, start, start + t, 1) + sum(psums, finish, finish + t, 0) + sum(psums, finish, finish + t, 1); int office_meetings_home = sum(psums, 0, start, 0) + sum(psums, finish + t, n, 0); meetings_missed += office_meetings_home; if (meetings_missed > k) { continue; } int free_time = office_meetings_home + sum(psums, 0, start, 2) + sum(psums, finish + t, n, 2); int remote_meetings = sum(psums, 0, start, 1) + sum(psums, finish + t, n, 1); free_time += min(remote_meetings, k - meetings_missed); best = max(free_time, best); } } cout << best << endl; return 0; } |
English