#include <bits/stdc++.h>
using namespace std;
int main(){
cin.tie(0);
cout.tie(0);
ios_base::sync_with_stdio(0);
int n, k, t;
cin >> n >> k >> t;
string s;
cin >> s;
int czyn[n], wyj[n], pow[n], czasw[n], czasb[n];
for(int i = 0; i < n; i++) czyn[i] = s[i]-48;
int sp1 = 0, sp2 = 0;
for(int i = 0; i < n; i++){
czasw[i] = 0;
czasb[i] = 0;
if(czyn[i] == 3) czasw[i]++;
if(czyn[i] == 1) czasb[i]++;
if(i > 0){
czasw[i] += czasw[i-1];
czasb[i] += czasb[i-1];
}
}
for(int i = 0; i < n; i++){
int l = 0;
for(int j = i; j < i+t; j++){
if(czyn[j] != 3) l++;
}
if(i > 0){
l += czasb[i-1];
}
wyj[i] = l;
l = 0;
for(int j = n-i-1; j > n-i-t-1; j--){
if(czyn[j] != 3) l++;
}
if(i > 0){
l += czasb[n-1] - czasb[n-i-1];
}
pow[n-i-1] = l;
}
int w = -1;
if(czasb[n-1] <= k) w = n;
for(int i = 0; i < n; i++){
for(int j = n-1; j > i+t+t-1; j--){
if(wyj[i] + pow[j] <= k){
int a = 0, b = 0;
if(i > 0) a = czasw[i-1];
if(j < n-1) b = czasw[n-1] - czasw[j];
w = max(w, a+b+(k-(wyj[i]+pow[j])));
}
}
}
cout << w;
}
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 | #include <bits/stdc++.h> using namespace std; int main(){ cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); int n, k, t; cin >> n >> k >> t; string s; cin >> s; int czyn[n], wyj[n], pow[n], czasw[n], czasb[n]; for(int i = 0; i < n; i++) czyn[i] = s[i]-48; int sp1 = 0, sp2 = 0; for(int i = 0; i < n; i++){ czasw[i] = 0; czasb[i] = 0; if(czyn[i] == 3) czasw[i]++; if(czyn[i] == 1) czasb[i]++; if(i > 0){ czasw[i] += czasw[i-1]; czasb[i] += czasb[i-1]; } } for(int i = 0; i < n; i++){ int l = 0; for(int j = i; j < i+t; j++){ if(czyn[j] != 3) l++; } if(i > 0){ l += czasb[i-1]; } wyj[i] = l; l = 0; for(int j = n-i-1; j > n-i-t-1; j--){ if(czyn[j] != 3) l++; } if(i > 0){ l += czasb[n-1] - czasb[n-i-1]; } pow[n-i-1] = l; } int w = -1; if(czasb[n-1] <= k) w = n; for(int i = 0; i < n; i++){ for(int j = n-1; j > i+t+t-1; j--){ if(wyj[i] + pow[j] <= k){ int a = 0, b = 0; if(i > 0) a = czasw[i-1]; if(j < n-1) b = czasw[n-1] - czasw[j]; w = max(w, a+b+(k-(wyj[i]+pow[j]))); } } } cout << w; } |
English