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
| #include<bits/stdc++.h> using namespace std; #define rep(i,a,n) for(int i=(a);i<(n);i++) #define per(i,a,n) for(int i=(n-1);i>=(a);i--) #define fi first #define se second typedef pair <int,int> pII; typedef long long ll; const int INF = 0x3f3f3f3f;
int n,k; const int maxn = 1e4+100; char s[maxn]; int ve[maxn]; int solve(){ bool flag = 0; int cnt = 0; int l = 0,r = 0; int ans = 0; int j = 0; int st = 0,ed = n-1; while(s[st]==1&&st<n)st++; l = st; while(s[ed]==1&&st<=ed) ed--; r = n-ed-1; rep(i,st,ed+1){ if(s[i] == 1) cnt++; if(s[i] == 0 && cnt){ ve[++j] = cnt; cnt = 0; } } if(k==0) return l; sort(ve+1,ve+j+1); while(k>2 && j>=1){ ans += ve[j--]; k-=2; } if(k==1){ ans += max(l+r,ve[j]); }else{ ans += max(l+r,max(l+ve[j],r+ve[j])); } return ans; } char temp[maxn]; int main(){ #ifdef LOCAL freopen("1.in","r",stdin); #endif while(~scanf("%d%d",&n,&k)){ scanf("%s",s); rep(i,0,n) s[i] -= '0'; printf("%d\n",solve()); }
return 0; }
|