#include <iostream>
const int N=8000;
char events[N + 1];
int remote[N + 1];
int onsite[N + 1];
int main() {
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
int n, k, t;
std::cin >> n >> k >> t;
for (int i = 1; i <= n; i++) {
std::cin >> events[i];
if (events[i] == '1') {
onsite[i]++;
}
if (events[i] == '2') {
remote[i]++;
}
onsite[i] += onsite[i-1];
remote[i] += remote[i-1];
}
int best = -1;
// Result assuming not going to the office
{
int skippedMeetings = onsite[n];
if (skippedMeetings <= k) {
int skipsLeft = k - skippedMeetings;
int remotesVisited = std::max(remote[n] - skipsLeft, 0);
best = n - remotesVisited;
}
}
for (int i = t; i <= n - t; i++) {
for (int j = i; j <= n - t; j++) {
int skippedMeetings =
// Skipped during commute
(remote[i] - remote[i - t]) + (remote[j + t] - remote[j]) +
(onsite[i] - onsite[i - t]) + (onsite[j + t] - onsite[j]) +
// Skipped onsite while at home
(onsite[i - t]) + (onsite[n] - onsite[j + t]);
if (skippedMeetings <= k) {
int skipsLeft = k - skippedMeetings;
int remotesWhileAtHome = (remote[i - t]) + (remote[n] - remote[j + t]);
int remotesVisited = std::max(remotesWhileAtHome - skipsLeft, 0);
best = std::max((i - t) + (n - (j + t)) - remotesVisited, best);
}
}
}
std::cout << best;
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 | #include <iostream> const int N=8000; char events[N + 1]; int remote[N + 1]; int onsite[N + 1]; int main() { std::ios_base::sync_with_stdio(0); std::cin.tie(0); int n, k, t; std::cin >> n >> k >> t; for (int i = 1; i <= n; i++) { std::cin >> events[i]; if (events[i] == '1') { onsite[i]++; } if (events[i] == '2') { remote[i]++; } onsite[i] += onsite[i-1]; remote[i] += remote[i-1]; } int best = -1; // Result assuming not going to the office { int skippedMeetings = onsite[n]; if (skippedMeetings <= k) { int skipsLeft = k - skippedMeetings; int remotesVisited = std::max(remote[n] - skipsLeft, 0); best = n - remotesVisited; } } for (int i = t; i <= n - t; i++) { for (int j = i; j <= n - t; j++) { int skippedMeetings = // Skipped during commute (remote[i] - remote[i - t]) + (remote[j + t] - remote[j]) + (onsite[i] - onsite[i - t]) + (onsite[j + t] - onsite[j]) + // Skipped onsite while at home (onsite[i - t]) + (onsite[n] - onsite[j + t]); if (skippedMeetings <= k) { int skipsLeft = k - skippedMeetings; int remotesWhileAtHome = (remote[i - t]) + (remote[n] - remote[j + t]); int remotesVisited = std::max(remotesWhileAtHome - skipsLeft, 0); best = std::max((i - t) + (n - (j + t)) - remotesVisited, best); } } } std::cout << best; return 0; } |
English