#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); } |