#include <bits/stdc++.h>
using namespace std;
priority_queue<int> K;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
int n;
string slow;
int pocz; int kon;
for(int i=0;i<t;i++){
while(K.size()>0){
K.pop();
}
cin>>n;
cin>>slow;
int il=0;
int rozp=-1;
for(int i=0;i<n;i++){
if(slow[i]=='0'){
il++;
}
if(slow[i]=='1'){
pocz = il;
rozp=i;
break;
}
}
if(rozp==-1){
pocz = il;
rozp=n;
}
if(pocz>0){
pocz+=2;
}
il=0;
for(int i=rozp;i<n;i++){
if(slow[i]=='0'){
il++;
}
if(slow[i]=='1' and il>0){
K.push(il);
il=0;
}
}
kon = il;
if(kon>0){
kon+=2;
}
int odj=0;
int ur=0;
int war;
int gor;
//cout<<"d"<<K.size()<<"\n";
while(K.size()>0 or pocz-odj>0 or kon-odj>0){
gor=0;
//cout<<ur<<"\n";
if(K.size()>0){
gor=K.top();
}
if(pocz>=kon and (K.size()==0 or pocz>=gor) and pocz-odj-2>0){
//cout<<"huhu"<<pocz<<"\n";
ur=ur+pocz-odj-2;
pocz=-10000000;
odj=odj+2;
kon++;
continue;
}
if(kon>=pocz and (K.size()==0 or kon>=gor) and kon-odj-2>0){
//cout<<"wwww"<<"\n";
ur=ur+kon-odj-2;
kon=-10000000;
odj=odj+2;
pocz++;
continue;
}
if(K.size()==0){
break;
}
war=gor;
//cout<<gor<<"\n";
K.pop();
war = war-odj;
if(war<=0){
break;
}
if(war>1){
war--;
odj = odj+4;
kon=kon+2;
pocz=pocz+2;
}
else{
odj = odj +2;
kon++;
pocz++;
}
ur=ur+war;
//cout<<"z"<<ur<<"\n";
}
cout<<n-ur<<"\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 96 97 98 99 100 101 102 103 104 105 106 107 | #include <bits/stdc++.h> using namespace std; priority_queue<int> K; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cin>>t; int n; string slow; int pocz; int kon; for(int i=0;i<t;i++){ while(K.size()>0){ K.pop(); } cin>>n; cin>>slow; int il=0; int rozp=-1; for(int i=0;i<n;i++){ if(slow[i]=='0'){ il++; } if(slow[i]=='1'){ pocz = il; rozp=i; break; } } if(rozp==-1){ pocz = il; rozp=n; } if(pocz>0){ pocz+=2; } il=0; for(int i=rozp;i<n;i++){ if(slow[i]=='0'){ il++; } if(slow[i]=='1' and il>0){ K.push(il); il=0; } } kon = il; if(kon>0){ kon+=2; } int odj=0; int ur=0; int war; int gor; //cout<<"d"<<K.size()<<"\n"; while(K.size()>0 or pocz-odj>0 or kon-odj>0){ gor=0; //cout<<ur<<"\n"; if(K.size()>0){ gor=K.top(); } if(pocz>=kon and (K.size()==0 or pocz>=gor) and pocz-odj-2>0){ //cout<<"huhu"<<pocz<<"\n"; ur=ur+pocz-odj-2; pocz=-10000000; odj=odj+2; kon++; continue; } if(kon>=pocz and (K.size()==0 or kon>=gor) and kon-odj-2>0){ //cout<<"wwww"<<"\n"; ur=ur+kon-odj-2; kon=-10000000; odj=odj+2; pocz++; continue; } if(K.size()==0){ break; } war=gor; //cout<<gor<<"\n"; K.pop(); war = war-odj; if(war<=0){ break; } if(war>1){ war--; odj = odj+4; kon=kon+2; pocz=pocz+2; } else{ odj = odj +2; kon++; pocz++; } ur=ur+war; //cout<<"z"<<ur<<"\n"; } cout<<n-ur<<"\n"; } } |
English