//fast
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define all(x) x.begin(),x.end()
#define rep(n) for (int i = 0 ; i<n ; i++)
#define pb push_back
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n,k,t;
cin >> n >> k >> t;
int ile[4] = {0};
int s[n];
rep(n){
char xd;
cin >> xd;
s[i] = xd-'0';
}
rep(n){
ile[s[i]]++;
}
if (ile[1]<=k){
cout << min(n,ile[3]+k) << '\n';
return 0;
}
rep(t){
ile[s[i]]--;
if (s[i]!=3) k--;
}
int maks = -1;
for (int i = t ; i<n-t ; i++){
if (i!=t){
ile[s[i-1]]--;
if (s[i-1]!=3) k--;
ile[s[i-t-1]]++;
if (s[i-t-1]!=3) k++;
}
for (int j = i ; j<i+t ; j++){
ile[s[j]]--;
if (s[j]!=3) k--;
}
for (int j = i+t ; j<=n ; j++){
if (j!=i+t){
ile[s[j-1]]--;
if (s[j-1]!=3) k--;
if (s[j-t-1]!=3) k++;
}
if (k-ile[1]>=0){
maks = max(maks,ile[3]+min(ile[2]+ile[1],k));
}
}
for (int j = i ; j<n ; j++){
ile[s[j]]++;
if (j>n-1-t && s[j]!=3) k++;
}
}
cout << maks << '\n';
}
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 | //fast #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define all(x) x.begin(),x.end() #define rep(n) for (int i = 0 ; i<n ; i++) #define pb push_back int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n,k,t; cin >> n >> k >> t; int ile[4] = {0}; int s[n]; rep(n){ char xd; cin >> xd; s[i] = xd-'0'; } rep(n){ ile[s[i]]++; } if (ile[1]<=k){ cout << min(n,ile[3]+k) << '\n'; return 0; } rep(t){ ile[s[i]]--; if (s[i]!=3) k--; } int maks = -1; for (int i = t ; i<n-t ; i++){ if (i!=t){ ile[s[i-1]]--; if (s[i-1]!=3) k--; ile[s[i-t-1]]++; if (s[i-t-1]!=3) k++; } for (int j = i ; j<i+t ; j++){ ile[s[j]]--; if (s[j]!=3) k--; } for (int j = i+t ; j<=n ; j++){ if (j!=i+t){ ile[s[j-1]]--; if (s[j-1]!=3) k--; if (s[j-t-1]!=3) k++; } if (k-ile[1]>=0){ maks = max(maks,ile[3]+min(ile[2]+ile[1],k)); } } for (int j = i ; j<n ; j++){ ile[s[j]]++; if (j>n-1-t && s[j]!=3) k++; } } cout << maks << '\n'; } |
English