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