#include <bits/stdc++.h> using namespace std; int main(){ int n,k,t; int pier=0,ost=0; int j=0,d=0,trz=0; cin>>n>>k>>t; string tab(n,' '); for(int i = 0;i<n;i++){ cin >> tab[i]; if(tab[i]=='1') j++; if(tab[i]=='2') d++; if(tab[i]=='3') trz++; } for(int i = 0;i<n;i++){ if(tab[i]=='1'){ pier=i; break; } } for(int i = n-1;i>=0;i--){ if(tab[i]=='1'){ ost=i; break; } } if(k==0){ int lew=-1,praw=-1; int j = pier; while(j-t>=0){ bool k = 0; for(int i = j-t;i<j;i++){ if(tab[i]!='3'){ k=1; break; } } if(k) j--; else{ lew = j-t; break; } } j = ost; while(j+t<=n){ bool k = 0; for(int i = j+1;i<=j+t;i++){ if(tab[i]!='3'){ k=1; break; } } if(k) j++; else{ praw = j+t; break; } } //cout << pier << ' ' << ost << '\n'; //cout << lew << ' ' << praw << '\n'; if(lew==-1||praw==-1) cout << -1; else{ int ans = 0; int j = 0; while(j<lew){ if(tab[j++]=='3') ans++; } j = n; while(j>praw){ if(tab[j--]=='3') ans++; } cout << ans << '\n'; } } else if(t==0) cout << trz + min(d+j,k); else if(j<=k) cout << trz + min(d,k-j); return 0; }
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 87 88 | #include <bits/stdc++.h> using namespace std; int main(){ int n,k,t; int pier=0,ost=0; int j=0,d=0,trz=0; cin>>n>>k>>t; string tab(n,' '); for(int i = 0;i<n;i++){ cin >> tab[i]; if(tab[i]=='1') j++; if(tab[i]=='2') d++; if(tab[i]=='3') trz++; } for(int i = 0;i<n;i++){ if(tab[i]=='1'){ pier=i; break; } } for(int i = n-1;i>=0;i--){ if(tab[i]=='1'){ ost=i; break; } } if(k==0){ int lew=-1,praw=-1; int j = pier; while(j-t>=0){ bool k = 0; for(int i = j-t;i<j;i++){ if(tab[i]!='3'){ k=1; break; } } if(k) j--; else{ lew = j-t; break; } } j = ost; while(j+t<=n){ bool k = 0; for(int i = j+1;i<=j+t;i++){ if(tab[i]!='3'){ k=1; break; } } if(k) j++; else{ praw = j+t; break; } } //cout << pier << ' ' << ost << '\n'; //cout << lew << ' ' << praw << '\n'; if(lew==-1||praw==-1) cout << -1; else{ int ans = 0; int j = 0; while(j<lew){ if(tab[j++]=='3') ans++; } j = n; while(j>praw){ if(tab[j--]=='3') ans++; } cout << ans << '\n'; } } else if(t==0) cout << trz + min(d+j,k); else if(j<=k) cout << trz + min(d,k-j); return 0; } |