#include <bits/stdc++.h>
using namespace std;
int main(){
int n,k,t;
cin>>n>>k>>t;
string s;
cin>>s;
s = "x" + s;
vector<int> wolne(n+1, 0);
vector<int> biuro(n+1, 0);
vector<int> zdalne(n+1, 0);
for(int i=1; i<=n; i++) {
wolne[i] = wolne[i-1];
biuro[i] = biuro[i-1];
zdalne[i] = zdalne[i-1];
if(s[i] == '1')
biuro[i] ++;
else if(s[i] == '2')
zdalne[i] ++;
else
wolne[i] ++;
}
int res = -1;
for(int i=1; i<=n-2*t+1; i++) {
for(int j=i+t+1; j<=n-t+1; j++) {
int w = wolne[i-1] + wolne[n] - wolne[j+t-1];
int b = biuro[j-1] - biuro[i+t-1];
int biuro_z = zdalne[j-1] - zdalne[i+t-1];
int z = zdalne[i-1] + zdalne[n] - zdalne[j+t-1];
int opuszczone_b = biuro[n] - b;
int opuszczone_z = zdalne[n] - z - biuro_z;
// cout<<w<<" "<<b<<" "<<z<<" | "<<i<<" "<<j<<endl;
if(opuszczone_b + opuszczone_z <= k) {
int z_to_w = min(z, k - opuszczone_b - opuszczone_z);
int b_to_w = biuro[i-1] + biuro[n] - biuro[j+t-1];
res = max(res, w + z_to_w + b_to_w);
}
}
}
int no_zdalne = 0;
for(int i=1; i<=n; i++) {
if(s[i] == '2')
no_zdalne ++;
}
if(biuro[n] + zdalne[n] - no_zdalne <= k) {
int z_to_w = min(no_zdalne, k - biuro[n] - zdalne[n] + no_zdalne);
res = max(res, wolne[n] + z_to_w + biuro[n]);
}
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 | #include <bits/stdc++.h> using namespace std; int main(){ int n,k,t; cin>>n>>k>>t; string s; cin>>s; s = "x" + s; vector<int> wolne(n+1, 0); vector<int> biuro(n+1, 0); vector<int> zdalne(n+1, 0); for(int i=1; i<=n; i++) { wolne[i] = wolne[i-1]; biuro[i] = biuro[i-1]; zdalne[i] = zdalne[i-1]; if(s[i] == '1') biuro[i] ++; else if(s[i] == '2') zdalne[i] ++; else wolne[i] ++; } int res = -1; for(int i=1; i<=n-2*t+1; i++) { for(int j=i+t+1; j<=n-t+1; j++) { int w = wolne[i-1] + wolne[n] - wolne[j+t-1]; int b = biuro[j-1] - biuro[i+t-1]; int biuro_z = zdalne[j-1] - zdalne[i+t-1]; int z = zdalne[i-1] + zdalne[n] - zdalne[j+t-1]; int opuszczone_b = biuro[n] - b; int opuszczone_z = zdalne[n] - z - biuro_z; // cout<<w<<" "<<b<<" "<<z<<" | "<<i<<" "<<j<<endl; if(opuszczone_b + opuszczone_z <= k) { int z_to_w = min(z, k - opuszczone_b - opuszczone_z); int b_to_w = biuro[i-1] + biuro[n] - biuro[j+t-1]; res = max(res, w + z_to_w + b_to_w); } } } int no_zdalne = 0; for(int i=1; i<=n; i++) { if(s[i] == '2') no_zdalne ++; } if(biuro[n] + zdalne[n] - no_zdalne <= k) { int z_to_w = min(no_zdalne, k - biuro[n] - zdalne[n] + no_zdalne); res = max(res, wolne[n] + z_to_w + biuro[n]); } cout<<res; } |
English