#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <string>
#include <climits>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n, k, t;
string activities;
cin >> n >> k >> t >> activities;
vector<vector<int>> cnt(3, vector<int>(n + 1));
for (int i = 0; i < n; ++i) ++cnt[activities[i] - '1'][i + 1];
for (int i = 0; i < 3; ++i) partial_sum(cnt[i].begin(), cnt[i].end(), cnt[i].begin());
int res = INT_MIN;
for (int b = 1; b <= n; ++b)
{
for (int e = b + t; e + t <= n + 1; ++e)
{
int missed_travel = cnt[0][b + t - 1] - cnt[0][b - 1];
missed_travel += cnt[1][b + t - 1] - cnt[1][b - 1];
missed_travel += cnt[0][e + t - 1] - cnt[0][e - 1];
missed_travel += cnt[1][e + t - 1] - cnt[1][e - 1];
int missed_home = cnt[0][b - 1] + cnt[0][n] - cnt[0][e + t - 1];
int remote_home = cnt[1][b - 1] + cnt[1][n] - cnt[1][e + t - 1];
int free_time = cnt[2][b - 1] + cnt[2][n] - cnt[2][e + t - 1];
if (missed_travel + missed_home > k) continue;
res = max(res, free_time + missed_home + min(remote_home, k - missed_travel - missed_home));
}
}
if (cnt[0][n] <= k) res = max(res, cnt[2][n] + cnt[0][n] + min(cnt[1][n], k - cnt[0][n]));
if (res < 0) cout << "-1";
else 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 | #include <iostream> #include <vector> #include <algorithm> #include <numeric> #include <string> #include <climits> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, k, t; string activities; cin >> n >> k >> t >> activities; vector<vector<int>> cnt(3, vector<int>(n + 1)); for (int i = 0; i < n; ++i) ++cnt[activities[i] - '1'][i + 1]; for (int i = 0; i < 3; ++i) partial_sum(cnt[i].begin(), cnt[i].end(), cnt[i].begin()); int res = INT_MIN; for (int b = 1; b <= n; ++b) { for (int e = b + t; e + t <= n + 1; ++e) { int missed_travel = cnt[0][b + t - 1] - cnt[0][b - 1]; missed_travel += cnt[1][b + t - 1] - cnt[1][b - 1]; missed_travel += cnt[0][e + t - 1] - cnt[0][e - 1]; missed_travel += cnt[1][e + t - 1] - cnt[1][e - 1]; int missed_home = cnt[0][b - 1] + cnt[0][n] - cnt[0][e + t - 1]; int remote_home = cnt[1][b - 1] + cnt[1][n] - cnt[1][e + t - 1]; int free_time = cnt[2][b - 1] + cnt[2][n] - cnt[2][e + t - 1]; if (missed_travel + missed_home > k) continue; res = max(res, free_time + missed_home + min(remote_home, k - missed_travel - missed_home)); } } if (cnt[0][n] <= k) res = max(res, cnt[2][n] + cnt[0][n] + min(cnt[1][n], k - cnt[0][n])); if (res < 0) cout << "-1"; else cout << res; } |
English