#include <bits/stdc++.h>
using namespace std;
//vector <long long> v[1000000][2];
priority_queue <long long> q;
long long x[1000000], y[1000000];
char s[1000000];
int main()
{
long long a, b, c, w, i, j, k, n, z, t;
scanf("%lld", &t);
for(z=0; z<t; z++)
{
scanf("%lld%s", &n, s);
i=0;
a=0;
while(s[i]=='0')
{
i++;
a++;
}
// printf("%lld\n", a);
x[0]=a;
a=0;
for(i=i; i<n; i++)
{
if(s[i]=='1')
{
q.push(a);
a=0;
}
else a++;
}
x[1]=a;
a=0;
b=max(x[0], x[1]);
c=x[0]+x[1]-1;
i=0;
while(q.size())
{
w=q.top();
q.pop();
if(w>i+i+1)a+=w-i-i-1;
if(w>i+i+3)b+=w-i-i-3;
if(w>i+i+5)c+=w-i-i-5;
i+=2;
}
a=max(a, max(b, c));
printf("%lld\n", n-a);
}
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 | #include <bits/stdc++.h> using namespace std; //vector <long long> v[1000000][2]; priority_queue <long long> q; long long x[1000000], y[1000000]; char s[1000000]; int main() { long long a, b, c, w, i, j, k, n, z, t; scanf("%lld", &t); for(z=0; z<t; z++) { scanf("%lld%s", &n, s); i=0; a=0; while(s[i]=='0') { i++; a++; } // printf("%lld\n", a); x[0]=a; a=0; for(i=i; i<n; i++) { if(s[i]=='1') { q.push(a); a=0; } else a++; } x[1]=a; a=0; b=max(x[0], x[1]); c=x[0]+x[1]-1; i=0; while(q.size()) { w=q.top(); q.pop(); if(w>i+i+1)a+=w-i-i-1; if(w>i+i+3)b+=w-i-i-3; if(w>i+i+5)c+=w-i-i-5; i+=2; } a=max(a, max(b, c)); printf("%lld\n", n-a); } return(0); } |
English