#include <iostream>
#include <algorithm>
using namespace std;
int pref[4][8008];
int zap(int l, int r, int idx)
{
return pref[idx][r+1]-pref[idx][l];
}
int main()
{
int n,k,t;
cin >>n>>k>>t;
char a;
for (int i=0;i<n;i++)
{
cin >>a;
pref[1][i+1]=pref[1][i];
pref[2][i+1]=pref[2][i];
pref[3][i+1]=pref[3][i];
pref[a-'0'][i+1]++;
}
if (zap(0,n-1,1)<=k)
{
cout <<zap(0,n-1,3)+min(k,zap(0,n-1,1)+zap(0,n-1,2));
return 0;
}
int maxi=-1;
for (int i=0;i<n-(2*t)+1;i++)
for (int j=i+t;j<n-t+1;j++)
{
int wdrodz=zap(i,i+t-1,1)+zap(i,i+t-1,2)+zap(j,j+t-1,1)+zap(j,j+t-1,2);
if (wdrodz+zap(0,i-1,1)+zap(j+t,n-1,1)>k)
continue;
maxi=max(maxi,zap(0,i-1,1)+zap(0,i-1,3)+zap(j+t,n-1,1)+zap(j+t,n-1,3)+min(k-wdrodz,zap(0,i-1,2)+zap(j+t,n-1,2)));
}
cout <<maxi;
}
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 | #include <iostream> #include <algorithm> using namespace std; int pref[4][8008]; int zap(int l, int r, int idx) { return pref[idx][r+1]-pref[idx][l]; } int main() { int n,k,t; cin >>n>>k>>t; char a; for (int i=0;i<n;i++) { cin >>a; pref[1][i+1]=pref[1][i]; pref[2][i+1]=pref[2][i]; pref[3][i+1]=pref[3][i]; pref[a-'0'][i+1]++; } if (zap(0,n-1,1)<=k) { cout <<zap(0,n-1,3)+min(k,zap(0,n-1,1)+zap(0,n-1,2)); return 0; } int maxi=-1; for (int i=0;i<n-(2*t)+1;i++) for (int j=i+t;j<n-t+1;j++) { int wdrodz=zap(i,i+t-1,1)+zap(i,i+t-1,2)+zap(j,j+t-1,1)+zap(j,j+t-1,2); if (wdrodz+zap(0,i-1,1)+zap(j+t,n-1,1)>k) continue; maxi=max(maxi,zap(0,i-1,1)+zap(0,i-1,3)+zap(j+t,n-1,1)+zap(j+t,n-1,3)+min(k-wdrodz,zap(0,i-1,2)+zap(j+t,n-1,2))); } cout <<maxi; } |
English