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