#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; } |
English