#include <iostream>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, k, t;
cin >> n >> k >> t;
string segments;
cin >> segments;
std::vector<int> officeBefore(n);
std::vector<int> remoteBefore(n);
int office = 0;
int remote = 0;
for (int i = 0; i < n; i++) {
officeBefore[i] = office;
remoteBefore[i] = remote;
if (segments[i] == '1') {
office++;
}
if (segments[i] == '2') {
remote++;
}
}
std::vector<int> officeAfter(n);
std::vector<int> remoteAfter(n);
office = 0;
remote = 0;
for (int i = n - 1; i >= 0; i--) {
officeAfter[i] = office;
remoteAfter[i] = remote;
if (segments[i] == '1') {
office++;
}
if (segments[i] == '2') {
remote++;
}
}
int max = -1;
for (int i = t; i < n - t; i++) {
for (int j = i; j < n - t; j++) {
int skipped = officeBefore[i] + remoteBefore[i] - remoteBefore[i - t]
+ officeAfter[j] + remoteAfter[j] - remoteAfter[j + t];
if (skipped <= k) {
int meetings = remoteBefore[i - t] + remoteAfter[j + t] - (k - skipped);
int result = (i - t) + (n - 1 - j - t) - (meetings > 0 ? meetings : 0);
if (result > max) {
max = result;
}
}
}
}
if (officeBefore[n - 1] <= k) {
if (office <= k) {
int meetings = remote + office - k;
int result = n - (meetings > 0 ? meetings : 0);
if (result > max) {
max = result;
}
}
}
cout << max << "\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 63 64 65 66 67 68 69 70 | #include <iostream> #include <vector> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, k, t; cin >> n >> k >> t; string segments; cin >> segments; std::vector<int> officeBefore(n); std::vector<int> remoteBefore(n); int office = 0; int remote = 0; for (int i = 0; i < n; i++) { officeBefore[i] = office; remoteBefore[i] = remote; if (segments[i] == '1') { office++; } if (segments[i] == '2') { remote++; } } std::vector<int> officeAfter(n); std::vector<int> remoteAfter(n); office = 0; remote = 0; for (int i = n - 1; i >= 0; i--) { officeAfter[i] = office; remoteAfter[i] = remote; if (segments[i] == '1') { office++; } if (segments[i] == '2') { remote++; } } int max = -1; for (int i = t; i < n - t; i++) { for (int j = i; j < n - t; j++) { int skipped = officeBefore[i] + remoteBefore[i] - remoteBefore[i - t] + officeAfter[j] + remoteAfter[j] - remoteAfter[j + t]; if (skipped <= k) { int meetings = remoteBefore[i - t] + remoteAfter[j + t] - (k - skipped); int result = (i - t) + (n - 1 - j - t) - (meetings > 0 ? meetings : 0); if (result > max) { max = result; } } } } if (officeBefore[n - 1] <= k) { if (office <= k) { int meetings = remote + office - k; int result = n - (meetings > 0 ? meetings : 0); if (result > max) { max = result; } } } cout << max << "\n"; } |
English