#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> w1, w2;
int licz0(int kk)
{
  int u=0, a2=w2.size()-1;
  for (int k=kk; ;)
  {
      int u2= 0<=a2 ? w2[a2]-2*k : -1;
      if (u2<=0)
          break;
      if (u2<=2)
      {
          ++u;
          ++k;
          --a2;
          continue;
      }
      u+=u2-1;
      k+=2;
      --a2;
  }
  return u;
}
int licz1()
{
    if (w1.size()<1)
        return -1;
    return w1[w1.size()-1]+licz0(1);
}
int licz2()
{
    if (w1.size()<2)
        return -1;
    return w1[0]+w1[1]-1+licz0(2);
}
void xx()
{
    int n;
    string s;
    cin>>n>>s;
    w1.clear();
    w2.clear();
    int p1=-1;
    for (int i=0; i<n; ++i)
        if (s[i]=='1')
        {
            int ile=i-p1-1;
            if (0<ile)
            {
                if (p1==-1) w1.push_back(ile);
                else w2.push_back(ile);
            }
            p1=i;
        }
    if (p1==-1)
    {
        cout<<"0\n";
        return;
    }
    if (p1<n-1)
        w1.push_back(n-p1-1);
    sort(w1.begin(), w1.end());
    sort(w2.begin(), w2.end());
    int a=licz0(0), b=licz1(), c=licz2();
    int u=max(a, max(b, c));
    cout<<(n-u)<<'\n';
}
int main()
{
    ios_base::sync_with_stdio(false);
    int t;
    cin>>t;
    for (int i=0; i<t; ++i)
        xx();
    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 89 90 | #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; vector<int> w1, w2; int licz0(int kk) { int u=0, a2=w2.size()-1; for (int k=kk; ;) { int u2= 0<=a2 ? w2[a2]-2*k : -1; if (u2<=0) break; if (u2<=2) { ++u; ++k; --a2; continue; } u+=u2-1; k+=2; --a2; } return u; } int licz1() { if (w1.size()<1) return -1; return w1[w1.size()-1]+licz0(1); } int licz2() { if (w1.size()<2) return -1; return w1[0]+w1[1]-1+licz0(2); } void xx() { int n; string s; cin>>n>>s; w1.clear(); w2.clear(); int p1=-1; for (int i=0; i<n; ++i) if (s[i]=='1') { int ile=i-p1-1; if (0<ile) { if (p1==-1) w1.push_back(ile); else w2.push_back(ile); } p1=i; } if (p1==-1) { cout<<"0\n"; return; } if (p1<n-1) w1.push_back(n-p1-1); sort(w1.begin(), w1.end()); sort(w2.begin(), w2.end()); int a=licz0(0), b=licz1(), c=licz2(); int u=max(a, max(b, c)); cout<<(n-u)<<'\n'; } int main() { ios_base::sync_with_stdio(false); int t; cin>>t; for (int i=0; i<t; ++i) xx(); return 0; } | 
 
            
         English
                    English