#include <iostream> #include <vector> using namespace std; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); string data; int n, k, t; cin >> n >> k >> t; cin >> data; int rm, om; rm = om = 0; for ( char s : data) { if (s == '1') om++; else if (s == '2') rm++; } int tm = om + rm; int result; if (k >= om ) { if ( k >= tm ) { result = n; } else { result = n - (tm - k); } cout << result << "\n"; return 0; } result = -1; int ahm, aom, af; ahm = af = 0; vector<int> ahmv(n+1), afv(n+1); ahmv[n] = afv[n] = 0; for ( int i = n - 1; i >= 2*t; --i ) { switch (data[i]) { case '1': af++; break; case '2': ahm++; break; case '3': af++; break; } ahmv[i] = ahm; afv[i] = af; } int miw = 0; int mustM = tm - k; int lahm = 0; int laf = 0; for (int i = 0; i <= n - 2 * t; i++) { miw = 0; for (int j = t + i; j <= n - t; j++ ) { ahm = ahmv[j+t] + lahm; af = afv[j+t] + laf; if (tm - ahm - miw <= k) { int tmp = af; tmp += mustM <= miw ? ahm : ahm + miw - mustM; result = max(result, tmp); } switch (data[j]) { case '1': case '2': miw++; break; } } switch (data[i]) { case '1': laf++; break; case '2': lahm++; break; case '3': laf++; break; } } cout << result << "\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 <iostream> #include <vector> using namespace std; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); string data; int n, k, t; cin >> n >> k >> t; cin >> data; int rm, om; rm = om = 0; for ( char s : data) { if (s == '1') om++; else if (s == '2') rm++; } int tm = om + rm; int result; if (k >= om ) { if ( k >= tm ) { result = n; } else { result = n - (tm - k); } cout << result << "\n"; return 0; } result = -1; int ahm, aom, af; ahm = af = 0; vector<int> ahmv(n+1), afv(n+1); ahmv[n] = afv[n] = 0; for ( int i = n - 1; i >= 2*t; --i ) { switch (data[i]) { case '1': af++; break; case '2': ahm++; break; case '3': af++; break; } ahmv[i] = ahm; afv[i] = af; } int miw = 0; int mustM = tm - k; int lahm = 0; int laf = 0; for (int i = 0; i <= n - 2 * t; i++) { miw = 0; for (int j = t + i; j <= n - t; j++ ) { ahm = ahmv[j+t] + lahm; af = afv[j+t] + laf; if (tm - ahm - miw <= k) { int tmp = af; tmp += mustM <= miw ? ahm : ahm + miw - mustM; result = max(result, tmp); } switch (data[j]) { case '1': case '2': miw++; break; } } switch (data[i]) { case '1': laf++; break; case '2': lahm++; break; case '3': laf++; break; } } cout << result << "\n"; return 0; } |