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