#include <bits/stdc++.h>
using namespace std;
int main()
{
cin.tie(0)->sync_with_stdio(0);
int n,k,t;
cin>>n>>k>>t;
vector <int> typ(n+2),pref(n+2,0),suf(n+2,0),prb(n+2,0),sub(n+2,0);
for(int i=1;i<=n;i++)
{
char a;
cin>>a;
typ[i]=a-'0';
}
for(int i=1;i<=n;i++)
{
if(i>1)
{
pref[i]=pref[i-1];
prb[i]=prb[i-1];
suf[n-i+1]=suf[n-i+2];
sub[n-i+1]=sub[n-i+2];
}
if(typ[i]==2) pref[i]++;
if(typ[i]==1) {prb[i]++; pref[i]++;}
if(typ[n-i+1]==2) suf[n-i+1]++;
if(typ[n-i+1]==1) {sub[n-i+1]++; suf[n-i+1]++;}
}
//for(int i=0;i<n+2;i++) cout<<pref[i]<<" "<<prb[i]<<" "<<suf[i]<<" "<<sub[i]<<"\n";
int maksiu=-1;
if(prb[n]<=k) {maksiu=n-max(0,pref[n]-k);} ///jak moga same zdalne byc+
for(int i=t+1;i<=n-t;i++)
for(int j=i;j<=n-t;j++)
if(prb[i-1]+sub[j+1]<=k) ///te niezdalne
{
int ls=pref[i-1]-pref[i-1-t]+suf[j+1]-suf[j+t+1]; ///te na trasie
if(ls<=k)
{
int zs=pref[i-1-t]+suf[j+t+1]; ///te w domu
zs=max(zs-(k-ls),0);
maksiu=max(maksiu,n-(j-i+1)-2*t-zs);
}
}
cout<<maksiu<<"\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 | #include <bits/stdc++.h> using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); int n,k,t; cin>>n>>k>>t; vector <int> typ(n+2),pref(n+2,0),suf(n+2,0),prb(n+2,0),sub(n+2,0); for(int i=1;i<=n;i++) { char a; cin>>a; typ[i]=a-'0'; } for(int i=1;i<=n;i++) { if(i>1) { pref[i]=pref[i-1]; prb[i]=prb[i-1]; suf[n-i+1]=suf[n-i+2]; sub[n-i+1]=sub[n-i+2]; } if(typ[i]==2) pref[i]++; if(typ[i]==1) {prb[i]++; pref[i]++;} if(typ[n-i+1]==2) suf[n-i+1]++; if(typ[n-i+1]==1) {sub[n-i+1]++; suf[n-i+1]++;} } //for(int i=0;i<n+2;i++) cout<<pref[i]<<" "<<prb[i]<<" "<<suf[i]<<" "<<sub[i]<<"\n"; int maksiu=-1; if(prb[n]<=k) {maksiu=n-max(0,pref[n]-k);} ///jak moga same zdalne byc+ for(int i=t+1;i<=n-t;i++) for(int j=i;j<=n-t;j++) if(prb[i-1]+sub[j+1]<=k) ///te niezdalne { int ls=pref[i-1]-pref[i-1-t]+suf[j+1]-suf[j+t+1]; ///te na trasie if(ls<=k) { int zs=pref[i-1-t]+suf[j+t+1]; ///te w domu zs=max(zs-(k-ls),0); maksiu=max(maksiu,n-(j-i+1)-2*t-zs); } } cout<<maksiu<<"\n"; } |
English