#include<iostream> constexpr int MN=8e3+5; int pref[2][MN]; int sum(int a,int b,int c){return pref[c][b]-pref[c][a-1];} using namespace std; int main(){ ios_base::sync_with_stdio(0); int n,k,t,a;string s; cin>>n>>k>>t>>s; for(int j=1;j<=n;j++) { if(s[j-1]=='1') pref[0][j]+=1; if(s[j-1]=='2') pref[1][j]+=1; pref[0][j]+=pref[0][j-1]; pref[1][j]+=pref[1][j-1]; } int need=max(0,pref[0][n]+pref[1][n]-k); if(pref[1][n]>=need){cout<<n-need<<endl;return 0;} int kan=-1; for(int j=1;j<=n-2*t;j++) for(int z=j+t;z<=n-t;z++) { int wb=need-sum(j+t,z,0)-sum(j+t,z,1); if(wb<=0)kan=max(kan,n-(z+t-j+1)); else if(sum(j+t,z,0)+sum(j+t,z,1)+sum(1,j-1,1)+sum(z+t+1,n,1)>=need) kan=max(kan,n-(z+t-j+1+wb)); //cout<<j<<' '<<z<<' '<<' '<<kan<<endl; } cout<<kan<<endl; }
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 | #include<iostream> constexpr int MN=8e3+5; int pref[2][MN]; int sum(int a,int b,int c){return pref[c][b]-pref[c][a-1];} using namespace std; int main(){ ios_base::sync_with_stdio(0); int n,k,t,a;string s; cin>>n>>k>>t>>s; for(int j=1;j<=n;j++) { if(s[j-1]=='1') pref[0][j]+=1; if(s[j-1]=='2') pref[1][j]+=1; pref[0][j]+=pref[0][j-1]; pref[1][j]+=pref[1][j-1]; } int need=max(0,pref[0][n]+pref[1][n]-k); if(pref[1][n]>=need){cout<<n-need<<endl;return 0;} int kan=-1; for(int j=1;j<=n-2*t;j++) for(int z=j+t;z<=n-t;z++) { int wb=need-sum(j+t,z,0)-sum(j+t,z,1); if(wb<=0)kan=max(kan,n-(z+t-j+1)); else if(sum(j+t,z,0)+sum(j+t,z,1)+sum(1,j-1,1)+sum(z+t+1,n,1)>=need) kan=max(kan,n-(z+t-j+1+wb)); //cout<<j<<' '<<z<<' '<<' '<<kan<<endl; } cout<<kan<<endl; } |