#include<bits/stdc++.h>
using namespace std;
int sum(int a, int b, vector<int>&v)
{
if(a>b)
return 0;
return(v[b]-v[a-1]);
}
int main()
{
ios_base::sync_with_stdio(0);
cout.tie(0);
cin.tie(0);
int n, k, t;
cin>>n>>k>>t;
vector<int>v(n+1), prefonline(n+1), pref(n+1), prefnormal(n+1);
pref[0]=0;
prefnormal[0]=0;
prefonline[0]=0;
char c;
for(int i=1; i<=n; i++)
{
cin>>c;
v[i]=(int)c-(int)'0';
pref[i]=pref[i-1];
prefnormal[i]=prefnormal[i-1];
prefonline[i]=prefonline[i-1];
if(v[i]!=3)
pref[i]++;
if(v[i]==2)
prefonline[i]++;
else if(v[i]==1)
prefnormal[i]++;
}
if(k>=pref[n])
cout<<n;
else if(pref[n]-prefonline[n]<=k)
{
int icanmiss=k-prefnormal[n];
cout<<n-prefonline[n]+min(icanmiss, prefonline[n]);
}
else
{
int res=-1;
for(int i=t+1; i<=n-t; i++)
{
for(int j=i; j<=n-t; j++)
{
//cout<<i<<" "<<j<<" "<<res<<endl;
int miss=sum(1, i-t-1, prefnormal)+sum(j+t+1, n, prefnormal)+sum(i-t, i-1, pref)+sum(j+1, j+t, pref);
if(miss<=k)
{
res=max(res, n-(2*t+j-i+1)-sum(1, i-t-1, prefonline)-sum(j+t+1, n, prefonline)+min(k-miss, sum(1, i-t-1, prefonline)+sum(j+t+1, n, prefonline)));
//if(res==7)
// cout<<i<<" "<<j<<" "<<sum(1, i-t-1, prefonline)<<" "<<sum(j+t+1, n, prefonline)<<" "<<k-miss<<endl;
}
}
}
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 56 57 58 59 60 61 62 | #include<bits/stdc++.h> using namespace std; int sum(int a, int b, vector<int>&v) { if(a>b) return 0; return(v[b]-v[a-1]); } int main() { ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); int n, k, t; cin>>n>>k>>t; vector<int>v(n+1), prefonline(n+1), pref(n+1), prefnormal(n+1); pref[0]=0; prefnormal[0]=0; prefonline[0]=0; char c; for(int i=1; i<=n; i++) { cin>>c; v[i]=(int)c-(int)'0'; pref[i]=pref[i-1]; prefnormal[i]=prefnormal[i-1]; prefonline[i]=prefonline[i-1]; if(v[i]!=3) pref[i]++; if(v[i]==2) prefonline[i]++; else if(v[i]==1) prefnormal[i]++; } if(k>=pref[n]) cout<<n; else if(pref[n]-prefonline[n]<=k) { int icanmiss=k-prefnormal[n]; cout<<n-prefonline[n]+min(icanmiss, prefonline[n]); } else { int res=-1; for(int i=t+1; i<=n-t; i++) { for(int j=i; j<=n-t; j++) { //cout<<i<<" "<<j<<" "<<res<<endl; int miss=sum(1, i-t-1, prefnormal)+sum(j+t+1, n, prefnormal)+sum(i-t, i-1, pref)+sum(j+1, j+t, pref); if(miss<=k) { res=max(res, n-(2*t+j-i+1)-sum(1, i-t-1, prefonline)-sum(j+t+1, n, prefonline)+min(k-miss, sum(1, i-t-1, prefonline)+sum(j+t+1, n, prefonline))); //if(res==7) // cout<<i<<" "<<j<<" "<<sum(1, i-t-1, prefonline)<<" "<<sum(j+t+1, n, prefonline)<<" "<<k-miss<<endl; } } } cout<<res; } } |
English