#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; } |
English