#include <bits/stdc++.h>
using namespace std;
int main() {
int n, max_skip, ride;
cin >> n >> max_skip >> ride;
string s;
cin >> s;
int onsite = 0;
int remote = 0;
for (int i = 0; i < n; i++) {
onsite += (s[i] == '1');
remote += (s[i] == '2');
}
int required = max(0, onsite + remote - max_skip);
int answer = -1;
if (onsite <= max_skip) {
answer = n - min(remote, required);
}
for (int i = ride; i < n - ride; i++) {
remote = 0;
for (int j = 0; j < n; j++) {
if (j < i - ride || j >= i + ride) {
if (s[j] == '2') {
remote++;
}
}
}
int must = 0;
for (int j = i; j + ride < n; j++) {
must += (s[j] != '3');
remote -= (s[j+ride] == '2');
if (must + remote >= required) {
int home_time = i - ride + (n - 1 - j - ride);
int meetings = max(required - must, 0);
// assert(meetings <= home_time);
answer = max(answer, home_time - meetings);
}
}
}
cout << answer << "\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 | #include <bits/stdc++.h> using namespace std; int main() { int n, max_skip, ride; cin >> n >> max_skip >> ride; string s; cin >> s; int onsite = 0; int remote = 0; for (int i = 0; i < n; i++) { onsite += (s[i] == '1'); remote += (s[i] == '2'); } int required = max(0, onsite + remote - max_skip); int answer = -1; if (onsite <= max_skip) { answer = n - min(remote, required); } for (int i = ride; i < n - ride; i++) { remote = 0; for (int j = 0; j < n; j++) { if (j < i - ride || j >= i + ride) { if (s[j] == '2') { remote++; } } } int must = 0; for (int j = i; j + ride < n; j++) { must += (s[j] != '3'); remote -= (s[j+ride] == '2'); if (must + remote >= required) { int home_time = i - ride + (n - 1 - j - ride); int meetings = max(required - must, 0); // assert(meetings <= home_time); answer = max(answer, home_time - meetings); } } } cout << answer << "\n"; } |
English