#include <bits/stdc++.h> #define LL long long using namespace std; int zadania[101000]; int biuro[10100]; int dom[10100]; int main() { ios_base::sync_with_stdio(false); int n,k,t; char c; cin>>n>>k>>t; int answer=-1,straty=0,podwynik=0,robota=0;; for(int i=1;i<=n;i++) { cin>>c; dom[i]+=dom[i-1]; biuro[i]+=biuro[i-1]; zadania[i]+=zadania[i-1]; if(c=='1')biuro[i]++; if(c=='2')dom[i]++; if(c=='3')zadania[i]++; // cout<<dom[i]<<" DOM "<<biuro[i]<<" BIURO "<<zadania[i]<<endl; } for(int i=1;i<=n;i++) { for(int j=t;j<=i-t;j++) { straty+=biuro[i]-biuro[i-t]+dom[i]-dom[i-t]; straty+=biuro[j]-biuro[j-t]+dom[j]-dom[j-t]; //straty+=dom[i-t]-dom[j]; // cout<<straty<<" DS "<<endl; straty+=biuro[j-t]+biuro[n]-biuro[i]; robota+=biuro[i-t]-biuro[j]+dom[j-t]+dom[n]-dom[i]+dom[i-t]-dom[j]; podwynik+=zadania[n]-(zadania[i]-zadania[j-t]); // cout<<straty<<" D "<<i<<" "<<j<<endl; if(straty<=k)answer=max(answer,podwynik+min(k-straty,robota)); podwynik=0; straty=0; robota=0; } } if(biuro[n]<=k) { answer=max(answer,zadania[n]+min(biuro[n]+dom[n],k)); } cout<<answer; }
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 | #include <bits/stdc++.h> #define LL long long using namespace std; int zadania[101000]; int biuro[10100]; int dom[10100]; int main() { ios_base::sync_with_stdio(false); int n,k,t; char c; cin>>n>>k>>t; int answer=-1,straty=0,podwynik=0,robota=0;; for(int i=1;i<=n;i++) { cin>>c; dom[i]+=dom[i-1]; biuro[i]+=biuro[i-1]; zadania[i]+=zadania[i-1]; if(c=='1')biuro[i]++; if(c=='2')dom[i]++; if(c=='3')zadania[i]++; // cout<<dom[i]<<" DOM "<<biuro[i]<<" BIURO "<<zadania[i]<<endl; } for(int i=1;i<=n;i++) { for(int j=t;j<=i-t;j++) { straty+=biuro[i]-biuro[i-t]+dom[i]-dom[i-t]; straty+=biuro[j]-biuro[j-t]+dom[j]-dom[j-t]; //straty+=dom[i-t]-dom[j]; // cout<<straty<<" DS "<<endl; straty+=biuro[j-t]+biuro[n]-biuro[i]; robota+=biuro[i-t]-biuro[j]+dom[j-t]+dom[n]-dom[i]+dom[i-t]-dom[j]; podwynik+=zadania[n]-(zadania[i]-zadania[j-t]); // cout<<straty<<" D "<<i<<" "<<j<<endl; if(straty<=k)answer=max(answer,podwynik+min(k-straty,robota)); podwynik=0; straty=0; robota=0; } } if(biuro[n]<=k) { answer=max(answer,zadania[n]+min(biuro[n]+dom[n],k)); } cout<<answer; } |