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