#include <bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { int n; cin>>n; string s; cin>>s; vector<int> gapes; int last=-1; int left=0, right=0; bool b1=0; for(int i=0; i<n; i++) { if(s[i]=='1' && (last==-1 || i-last==1)){ last=i; b1=1;} else if(s[i]=='1') { gapes.push_back(i-last-1); last=i; } if(last==-1) left++; } right=n-last-1; sort(gapes.begin(), gapes.end(), greater<int>()); //cout<<left<<" "<<right; if(left<right) swap(left, right); int res=0, dni=0; int r1,r2,r3; /////1 dni++; res+=left; dni++; res+=max(0, right-1); for(int i=0; i<gapes.size(); i++) { if(gapes[i]-dni*2==1){ res++; break; } else res+=max(0, gapes[i]-dni*2-1); dni+=2; } r1=n-res; ////2 res=0; dni=0; dni++; res+=left; for(int i=0; i<gapes.size(); i++) { if(gapes[i]-dni*2==1){ res++; break; } else res+=max(0, gapes[i]-dni*2-1); dni+=2; } r2=n-res; //// 3 res=0; dni=0; for(int i=0; i<gapes.size(); i++) { if(gapes[i]-dni*2==1){ res++; break; } else res+=max(0, gapes[i]-dni*2-1); dni+=2; } r3=n-res; if(!b1) cout<<0<<'\n'; else cout<<min(r1, min(r2, r3))<<'\n'; } }
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 89 90 91 92 93 94 95 | #include <bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { int n; cin>>n; string s; cin>>s; vector<int> gapes; int last=-1; int left=0, right=0; bool b1=0; for(int i=0; i<n; i++) { if(s[i]=='1' && (last==-1 || i-last==1)){ last=i; b1=1;} else if(s[i]=='1') { gapes.push_back(i-last-1); last=i; } if(last==-1) left++; } right=n-last-1; sort(gapes.begin(), gapes.end(), greater<int>()); //cout<<left<<" "<<right; if(left<right) swap(left, right); int res=0, dni=0; int r1,r2,r3; /////1 dni++; res+=left; dni++; res+=max(0, right-1); for(int i=0; i<gapes.size(); i++) { if(gapes[i]-dni*2==1){ res++; break; } else res+=max(0, gapes[i]-dni*2-1); dni+=2; } r1=n-res; ////2 res=0; dni=0; dni++; res+=left; for(int i=0; i<gapes.size(); i++) { if(gapes[i]-dni*2==1){ res++; break; } else res+=max(0, gapes[i]-dni*2-1); dni+=2; } r2=n-res; //// 3 res=0; dni=0; for(int i=0; i<gapes.size(); i++) { if(gapes[i]-dni*2==1){ res++; break; } else res+=max(0, gapes[i]-dni*2-1); dni+=2; } r3=n-res; if(!b1) cout<<0<<'\n'; else cout<<min(r1, min(r2, r3))<<'\n'; } } |