#include <bits/stdc++.h> using namespace std; int main() { int n, k, t; int fo = -1, lo, mio = 0, m = 0, mr = 0; cin >> n >> k >> t; vector<int> prefix_m(n); vector<int> prefix_mio(n); vector<int> prefix_mr(n); string str; cin >> str; for (int i = 0; i < n; i++) { if (str[i] == '1' || str[i] == '2') m++; if (str[i] == '1') { mio++; if (fo == -1) fo = i; lo = i; } if (str[i] == '2') mr++; prefix_m[i] = m; prefix_mio[i] = mio; prefix_mr[i] = mr; } // for (auto p : prefix_mr) // { // cout << p << " "; // } // cout << endl; // for (auto p : prefix_mio) // { // cout << p << " "; // } // cout << endl; if (m <= k) { cout << n << endl; return 0; } if (mio <= k) { cout << n - (m - k) << endl; return 0; } int res = -1; int e; for (int i = 0; i < n; i++) { if (i + t > n) break; for (int j = i + t; j < n; j++) { if (j + t > n) break; e = 0; e = prefix_mio[i + t - 1] + prefix_mr[i + t - 1] - (i ? prefix_mr[i - 1] : 0) + prefix_mio[n-1] - prefix_mio[j-1] + prefix_mr[j + t - 1] - prefix_mr[j-1]; if(e <= k){ res = max(res, n - (j + t - i) - (mr - (prefix_mr[j+t-1] - prefix_mr[i])) + (k - e)); // cout << e << " " << i << " " << j << endl; } } } 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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #include <bits/stdc++.h> using namespace std; int main() { int n, k, t; int fo = -1, lo, mio = 0, m = 0, mr = 0; cin >> n >> k >> t; vector<int> prefix_m(n); vector<int> prefix_mio(n); vector<int> prefix_mr(n); string str; cin >> str; for (int i = 0; i < n; i++) { if (str[i] == '1' || str[i] == '2') m++; if (str[i] == '1') { mio++; if (fo == -1) fo = i; lo = i; } if (str[i] == '2') mr++; prefix_m[i] = m; prefix_mio[i] = mio; prefix_mr[i] = mr; } // for (auto p : prefix_mr) // { // cout << p << " "; // } // cout << endl; // for (auto p : prefix_mio) // { // cout << p << " "; // } // cout << endl; if (m <= k) { cout << n << endl; return 0; } if (mio <= k) { cout << n - (m - k) << endl; return 0; } int res = -1; int e; for (int i = 0; i < n; i++) { if (i + t > n) break; for (int j = i + t; j < n; j++) { if (j + t > n) break; e = 0; e = prefix_mio[i + t - 1] + prefix_mr[i + t - 1] - (i ? prefix_mr[i - 1] : 0) + prefix_mio[n-1] - prefix_mio[j-1] + prefix_mr[j + t - 1] - prefix_mr[j-1]; if(e <= k){ res = max(res, n - (j + t - i) - (mr - (prefix_mr[j+t-1] - prefix_mr[i])) + (k - e)); // cout << e << " " << i << " " << j << endl; } } } cout << res; } |