#include <bits/stdc++.h> typedef long long ll; typedef short int sint; using namespace std; int main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false); vector<sint> meetingsBiuro, meetingsOnline; string s; sint n, k, t, ALLSpotkania = 0; cin >> n >> k >> t >> s; meetingsBiuro.resize(n + 1); meetingsOnline.resize(n + 1); for (sint i = 0; i < n; ++i) { meetingsBiuro[i + 1] = meetingsBiuro[i]; meetingsOnline[i + 1] = meetingsOnline[i]; if (s[i] == '1') ++meetingsBiuro[i + 1]; else if (s[i] == '2') ++meetingsOnline[i + 1]; } // SPRAWDZ PRZYPADEK BEZ BIURA JESZCZE sint MASTERpocBiuro = t + 1, MASTERkonBiuro = n - t, ans = -1; for (sint pocBiuro = MASTERpocBiuro; pocBiuro <= MASTERkonBiuro; ++pocBiuro) { for (sint konBiuro = pocBiuro; konBiuro <= MASTERkonBiuro; ++konBiuro) { sint mozliweOpuszczenia = k; mozliweOpuszczenia -= meetingsBiuro[pocBiuro - 1]; mozliweOpuszczenia -= meetingsBiuro[n] - meetingsBiuro[konBiuro]; mozliweOpuszczenia -= meetingsOnline[pocBiuro - 1] - meetingsOnline[pocBiuro - 1 - t]; mozliweOpuszczenia -= meetingsOnline[konBiuro + t] - meetingsOnline[konBiuro]; if (mozliweOpuszczenia < 0) continue; sint SpotkaniaJeszcze = 0; SpotkaniaJeszcze += meetingsOnline[pocBiuro - 1 - t]; SpotkaniaJeszcze += meetingsOnline[n] - meetingsOnline[konBiuro + t]; SpotkaniaJeszcze -= mozliweOpuszczenia; SpotkaniaJeszcze = max(SpotkaniaJeszcze, (sint)(0)); sint czasZADAN = (pocBiuro - t - 1) + (n - (konBiuro + t)); czasZADAN -= SpotkaniaJeszcze; ans = max(ans, czasZADAN); } } // BEZ BIURA // POC sint mozliweOpuszczeniaB = k; mozliweOpuszczeniaB -= meetingsBiuro[n]; if (mozliweOpuszczeniaB >= 0) { sint SpotkaniaJeszczeB = 0; SpotkaniaJeszczeB += meetingsOnline[n]; SpotkaniaJeszczeB -= mozliweOpuszczeniaB; SpotkaniaJeszczeB = max(SpotkaniaJeszczeB, (sint)(0)); sint czasZADANB = n; czasZADANB -= SpotkaniaJeszczeB; ans = max(ans, czasZADANB); } // KON cout << ans << '\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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | #include <bits/stdc++.h> typedef long long ll; typedef short int sint; using namespace std; int main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false); vector<sint> meetingsBiuro, meetingsOnline; string s; sint n, k, t, ALLSpotkania = 0; cin >> n >> k >> t >> s; meetingsBiuro.resize(n + 1); meetingsOnline.resize(n + 1); for (sint i = 0; i < n; ++i) { meetingsBiuro[i + 1] = meetingsBiuro[i]; meetingsOnline[i + 1] = meetingsOnline[i]; if (s[i] == '1') ++meetingsBiuro[i + 1]; else if (s[i] == '2') ++meetingsOnline[i + 1]; } // SPRAWDZ PRZYPADEK BEZ BIURA JESZCZE sint MASTERpocBiuro = t + 1, MASTERkonBiuro = n - t, ans = -1; for (sint pocBiuro = MASTERpocBiuro; pocBiuro <= MASTERkonBiuro; ++pocBiuro) { for (sint konBiuro = pocBiuro; konBiuro <= MASTERkonBiuro; ++konBiuro) { sint mozliweOpuszczenia = k; mozliweOpuszczenia -= meetingsBiuro[pocBiuro - 1]; mozliweOpuszczenia -= meetingsBiuro[n] - meetingsBiuro[konBiuro]; mozliweOpuszczenia -= meetingsOnline[pocBiuro - 1] - meetingsOnline[pocBiuro - 1 - t]; mozliweOpuszczenia -= meetingsOnline[konBiuro + t] - meetingsOnline[konBiuro]; if (mozliweOpuszczenia < 0) continue; sint SpotkaniaJeszcze = 0; SpotkaniaJeszcze += meetingsOnline[pocBiuro - 1 - t]; SpotkaniaJeszcze += meetingsOnline[n] - meetingsOnline[konBiuro + t]; SpotkaniaJeszcze -= mozliweOpuszczenia; SpotkaniaJeszcze = max(SpotkaniaJeszcze, (sint)(0)); sint czasZADAN = (pocBiuro - t - 1) + (n - (konBiuro + t)); czasZADAN -= SpotkaniaJeszcze; ans = max(ans, czasZADAN); } } // BEZ BIURA // POC sint mozliweOpuszczeniaB = k; mozliweOpuszczeniaB -= meetingsBiuro[n]; if (mozliweOpuszczeniaB >= 0) { sint SpotkaniaJeszczeB = 0; SpotkaniaJeszczeB += meetingsOnline[n]; SpotkaniaJeszczeB -= mozliweOpuszczeniaB; SpotkaniaJeszczeB = max(SpotkaniaJeszczeB, (sint)(0)); sint czasZADANB = n; czasZADANB -= SpotkaniaJeszczeB; ans = max(ans, czasZADANB); } // KON cout << ans << '\n'; return 0; } |