#include <bits/stdc++.h>
using namespace std;
int pref1[ 8003 ];
int pref2[ 8003 ];
int pref3[ 8003 ];
int res = -1;
void print(int t[], int n){
for(int i = 1; i <= n; ++i){
cout << t[ i ] << " ";
}
cout << '\n';
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n, k, t; cin >> n >> k >> t;
for(int i = 1 ; i <= n; ++i){
char c; cin >> c;
if(c == '1'){
pref1[ i ] = pref1[ i - 1 ] + 1;
pref2[ i ] = pref2[ i - 1 ];
pref3[ i ] = pref3[ i - 1 ];
}
else if (c == '2'){
pref1[ i ] = pref1[ i - 1 ];
pref2[ i ] = pref2[ i - 1 ] + 1;
pref3[ i ] = pref3[ i - 1 ];
}
else{
pref1[ i ] = pref1[ i - 1 ];
pref2[ i ] = pref2[ i - 1 ];
pref3[ i ] = pref3[ i - 1 ] + 1;
}
}
// print(pref1, n);
// print(pref2, n);
// print(pref3, n);
for(int i = 1; i <= n - (2*t) + 1; ++i){
for(int j = i + (2*t) - 1; j <= n; ++j){
//cout << i << " " << j << " ";
int k_left = k;
k_left -= pref1[ i + t - 1 ] - pref1[ i - 1 ] + pref1[ j ] - pref1[ j - t ];
k_left -= pref2[ i + t - 1 ] - pref2[ i - 1 ] + pref2[ j ] - pref2[ j - t ];
//cout << k_left << '\n';
int cnt = pref1[ i - 1 ] + pref1[ n ] - pref1[ j ];
k_left -= cnt;
if(k_left < 0){
continue;
}
cnt += pref3[ i - 1 ] + pref3[ n ] - pref3[ j ];
int left_2 = pref2[ i - 1 ] + pref2[ n ] - pref2[ j ];
cnt += min(left_2, k_left);
res = max(res, cnt);
}
}
if(k >= pref1[ n ]){
res = max(res, pref3[ n ] + min(k, pref2[ n ] + pref1[ n ]));
}
cout << res << '\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 | #include <bits/stdc++.h> using namespace std; int pref1[ 8003 ]; int pref2[ 8003 ]; int pref3[ 8003 ]; int res = -1; void print(int t[], int n){ for(int i = 1; i <= n; ++i){ cout << t[ i ] << " "; } cout << '\n'; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, k, t; cin >> n >> k >> t; for(int i = 1 ; i <= n; ++i){ char c; cin >> c; if(c == '1'){ pref1[ i ] = pref1[ i - 1 ] + 1; pref2[ i ] = pref2[ i - 1 ]; pref3[ i ] = pref3[ i - 1 ]; } else if (c == '2'){ pref1[ i ] = pref1[ i - 1 ]; pref2[ i ] = pref2[ i - 1 ] + 1; pref3[ i ] = pref3[ i - 1 ]; } else{ pref1[ i ] = pref1[ i - 1 ]; pref2[ i ] = pref2[ i - 1 ]; pref3[ i ] = pref3[ i - 1 ] + 1; } } // print(pref1, n); // print(pref2, n); // print(pref3, n); for(int i = 1; i <= n - (2*t) + 1; ++i){ for(int j = i + (2*t) - 1; j <= n; ++j){ //cout << i << " " << j << " "; int k_left = k; k_left -= pref1[ i + t - 1 ] - pref1[ i - 1 ] + pref1[ j ] - pref1[ j - t ]; k_left -= pref2[ i + t - 1 ] - pref2[ i - 1 ] + pref2[ j ] - pref2[ j - t ]; //cout << k_left << '\n'; int cnt = pref1[ i - 1 ] + pref1[ n ] - pref1[ j ]; k_left -= cnt; if(k_left < 0){ continue; } cnt += pref3[ i - 1 ] + pref3[ n ] - pref3[ j ]; int left_2 = pref2[ i - 1 ] + pref2[ n ] - pref2[ j ]; cnt += min(left_2, k_left); res = max(res, cnt); } } if(k >= pref1[ n ]){ res = max(res, pref3[ n ] + min(k, pref2[ n ] + pref1[ n ])); } cout << res << '\n'; return 0; } |
English