#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> onesNum, twosNum;
int ones(int a, int b) {
return onesNum[b] - onesNum[a];
}
int twos(int a, int b) {
return twosNum[b] - twosNum[a];
}
int onesAndTwos(int a, int b) {
return ones(a, b) + twos(a, b);
}
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
int n, k, t;
string s;
cin >> n >> k >> t >> s;
onesNum.resize(n + 1);
twosNum.resize(n + 1);
for (int i = 0; i < n; ++i) {
onesNum[i + 1] = onesNum[i] + (s[i] == '1');
twosNum[i + 1] = twosNum[i] + (s[i] == '2');
}
if (onesNum.back() <= k) {
cout << n - max(onesNum.back() + twosNum.back() - k, 0);
return 0;
}
int res = -1;
for (int i = 0; i < n - 2 * t; ++i) {
for (int j = i + 2 * t + 1; j <= n; ++j) {
int skippedMeetings = onesAndTwos(i, i + t) + onesAndTwos(j - t, j);
if (skippedMeetings > k) continue;
int meetingsToSkip = k - skippedMeetings;
int onesLeft = ones(0, i) + ones(j, n);
if (onesLeft > meetingsToSkip) continue;
int meetingsToAttendAtHome = onesAndTwos(0, i) + onesAndTwos(j, n);
int solvingHours = i + n - j - max(meetingsToAttendAtHome - meetingsToSkip, 0);
if (solvingHours > res) res = solvingHours;
}
}
cout << res;
}
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 | #include <iostream> #include <algorithm> #include <vector> using namespace std; vector<int> onesNum, twosNum; int ones(int a, int b) { return onesNum[b] - onesNum[a]; } int twos(int a, int b) { return twosNum[b] - twosNum[a]; } int onesAndTwos(int a, int b) { return ones(a, b) + twos(a, b); } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int n, k, t; string s; cin >> n >> k >> t >> s; onesNum.resize(n + 1); twosNum.resize(n + 1); for (int i = 0; i < n; ++i) { onesNum[i + 1] = onesNum[i] + (s[i] == '1'); twosNum[i + 1] = twosNum[i] + (s[i] == '2'); } if (onesNum.back() <= k) { cout << n - max(onesNum.back() + twosNum.back() - k, 0); return 0; } int res = -1; for (int i = 0; i < n - 2 * t; ++i) { for (int j = i + 2 * t + 1; j <= n; ++j) { int skippedMeetings = onesAndTwos(i, i + t) + onesAndTwos(j - t, j); if (skippedMeetings > k) continue; int meetingsToSkip = k - skippedMeetings; int onesLeft = ones(0, i) + ones(j, n); if (onesLeft > meetingsToSkip) continue; int meetingsToAttendAtHome = onesAndTwos(0, i) + onesAndTwos(j, n); int solvingHours = i + n - j - max(meetingsToAttendAtHome - meetingsToSkip, 0); if (solvingHours > res) res = solvingHours; } } cout << res; } |
English