#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, k, t; cin >> n >> k >> t; string duties; cin >> duties; int meetings[n + 1]; meetings[0] = 0; int calls[n + 1]; calls[0] = 0; for (int i = 1; i <= n; i++) { meetings[i] = meetings[i - 1] + (duties[i - 1] == '1'); calls[i] = calls[i - 1] + (duties[i - 1] == '2'); } int res = -1; if (meetings[n] <= k) { res = n + min(k - (meetings[n] + calls[n]), 0); } else { for (int start = t + 1; start <= n - t; start++) { for (int end = start; end <= n - t; end++) { int missed = meetings[n] - meetings[end] + meetings[start - 1] + calls[end + t] - calls[end] + calls[start - 1] - calls[start - t- 1]; if (missed <= k) { res = max(res, n - end - 2 * t + start - 1 + min(k - missed - (calls[n] - calls[end + t] + calls[start - t - 1]), 0)); } } } } cout << res << "\n"; 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 | #include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, k, t; cin >> n >> k >> t; string duties; cin >> duties; int meetings[n + 1]; meetings[0] = 0; int calls[n + 1]; calls[0] = 0; for (int i = 1; i <= n; i++) { meetings[i] = meetings[i - 1] + (duties[i - 1] == '1'); calls[i] = calls[i - 1] + (duties[i - 1] == '2'); } int res = -1; if (meetings[n] <= k) { res = n + min(k - (meetings[n] + calls[n]), 0); } else { for (int start = t + 1; start <= n - t; start++) { for (int end = start; end <= n - t; end++) { int missed = meetings[n] - meetings[end] + meetings[start - 1] + calls[end + t] - calls[end] + calls[start - 1] - calls[start - t- 1]; if (missed <= k) { res = max(res, n - end - 2 * t + start - 1 + min(k - missed - (calls[n] - calls[end + t] + calls[start - t - 1]), 0)); } } } } cout << res << "\n"; return 0; } |