#include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back int T[8005]; int D[8005]; bool vis[8005]; bool sp[8005]; bool biur[8005]; int SPVIS[8005]; int SPSP[8005]; int SPBIUR[8005]; bool dom[8005]; int SPDOM[8005]; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n , k , t; cin >> n >> k >> t; string dzien; cin >> dzien; int biuro = 0; for(int i = 0 ; i < dzien.size();++i) D[i+1]=dzien[i]-48; int N = dzien.size(); for( int i = 1 ; i<=n ; ++i) { if(D[i]==3) vis[i]=1; } for( int i = 1 ; i<=n ; ++i) { if(D[i]==2||D[i]==1) sp[i]=1; if(D[i]==1) biur[i]=1; if(D[i]==2) dom[i]=1; } for( int i = 1 ; i <=n ; ++i) { SPVIS[i]=SPVIS[i-1]+vis[i]; } for( int i = 1 ; i <=n ; ++i) { SPDOM[i]=SPDOM[i-1]+dom[i]; } for( int i = 1 ; i <=n ; ++i) { SPSP[i]=SPSP[i-1]+sp[i]; } for( int i = 1 ; i <=n ; ++i) { SPBIUR[i]=SPBIUR[i-1]+biur[i]; } int maxspot = 0; int maxh = -1; int gg = 0; int dd = 0 ; int xve=0; int domdd = 0; for(int i = 1 ; i + t + t <=n ; ++i) { for(int j = i + t + 1 ; j+t-1<=n;++j) { //cout << " i "<< i << " j " << j <<"\n"; //gg = SPVIS[n]-(SPVIS[i+t-1]-SPVIS[i-1])-(SPVIS[j+t-1]-SPVIS[j-1]); dd = (SPSP[i+t-1]-SPSP[i-1])+(SPSP[j+t-1]-SPSP[j-1]); domdd=SPBIUR[i-1]+(SPBIUR[n]-SPBIUR[j+t-1]); //cout << "dd " << dd << " domdd " << domdd<<"\n"; if(dd+domdd<=k) { xve=min(n,n-t-t-SPSP[n]+dd+(k-dd)-(j-(i+t)-(SPSP[j-1]-SPSP[i+t-1]))); maxh = max(maxh,xve); //cout << "xve " << xve << " "<< maxh << "\n"; } } } if(SPBIUR[n]<=k) {maxh = min(n,n-SPSP[n]+k);} cout << maxh; }
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back int T[8005]; int D[8005]; bool vis[8005]; bool sp[8005]; bool biur[8005]; int SPVIS[8005]; int SPSP[8005]; int SPBIUR[8005]; bool dom[8005]; int SPDOM[8005]; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n , k , t; cin >> n >> k >> t; string dzien; cin >> dzien; int biuro = 0; for(int i = 0 ; i < dzien.size();++i) D[i+1]=dzien[i]-48; int N = dzien.size(); for( int i = 1 ; i<=n ; ++i) { if(D[i]==3) vis[i]=1; } for( int i = 1 ; i<=n ; ++i) { if(D[i]==2||D[i]==1) sp[i]=1; if(D[i]==1) biur[i]=1; if(D[i]==2) dom[i]=1; } for( int i = 1 ; i <=n ; ++i) { SPVIS[i]=SPVIS[i-1]+vis[i]; } for( int i = 1 ; i <=n ; ++i) { SPDOM[i]=SPDOM[i-1]+dom[i]; } for( int i = 1 ; i <=n ; ++i) { SPSP[i]=SPSP[i-1]+sp[i]; } for( int i = 1 ; i <=n ; ++i) { SPBIUR[i]=SPBIUR[i-1]+biur[i]; } int maxspot = 0; int maxh = -1; int gg = 0; int dd = 0 ; int xve=0; int domdd = 0; for(int i = 1 ; i + t + t <=n ; ++i) { for(int j = i + t + 1 ; j+t-1<=n;++j) { //cout << " i "<< i << " j " << j <<"\n"; //gg = SPVIS[n]-(SPVIS[i+t-1]-SPVIS[i-1])-(SPVIS[j+t-1]-SPVIS[j-1]); dd = (SPSP[i+t-1]-SPSP[i-1])+(SPSP[j+t-1]-SPSP[j-1]); domdd=SPBIUR[i-1]+(SPBIUR[n]-SPBIUR[j+t-1]); //cout << "dd " << dd << " domdd " << domdd<<"\n"; if(dd+domdd<=k) { xve=min(n,n-t-t-SPSP[n]+dd+(k-dd)-(j-(i+t)-(SPSP[j-1]-SPSP[i+t-1]))); maxh = max(maxh,xve); //cout << "xve " << xve << " "<< maxh << "\n"; } } } if(SPBIUR[n]<=k) {maxh = min(n,n-SPSP[n]+k);} cout << maxh; } |