#include <bits/stdc++.h> using namespace std; int z,n,x,lsl,lsp,ciag=1,licz,wart[100005],ind,res,zapas,czas=0,wartosc,k; string s; int main(){ cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); cin>>z; for(int h=1;h<=z;h++){ cin>>n>>s; for(int i=0;i<s.size();i++){ //zliczanie zer w ciagach zer if(ind>0)zapas=ind; if(s[i]=='0')x=0; else x=1; if((x==0)&&(ciag%2==0))ciag++; else if(x==1&&ciag%2==1){ ciag++; ind++; licz=0; } if(x==0){ if(ciag==1)lsl++; else if(ciag%2==1){ licz++; wart[ind]=licz; } } } k=n-1; while(s[k]=='0'){ lsp++; k--; } if(lsp>=1){ wart[ind]=0; ind--; } //cout<<wart[ind-1]<<endl<<lsp; if(lsl==n){ cout<<0<<endl; res=0; ind=0; czas=0; licz=0; ciag=1; lsp=0; lsl=0; wartosc=0; zapas=0; n=0; x=0; k=0; continue; } sort(wart,wart+ind+1); while(lsp-czas>0||lsl-czas>0||wart[ind]-czas*2>0){ if(lsl>lsp){ if(wart[ind]>lsl*2){ if(wart[ind]-czas*2<=2){ res++; czas++; ind--; } else{ res+=max(0,wart[ind]-czas*2-1); ind--; czas+=2; } } else { res+=max(lsl-czas,0); czas++; lsl=0; } } else { if(wart[ind]>lsp*2){ if(wart[ind]-czas*2<=2){ res++; czas++; ind--; } else{ res+=max(0,wart[ind]-czas*2-1); ind--; czas+=2; } } else { res+=max(0,lsp-czas); czas++; lsp=0; } } } for(int i=0;i<=n;i++)wart[i]=0; cout<<n-res<<endl; res=0; ind=0; czas=0; licz=0; ciag=1; lsp=0; lsl=0; wartosc=0; zapas=0; n=0; x=0; k=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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | #include <bits/stdc++.h> using namespace std; int z,n,x,lsl,lsp,ciag=1,licz,wart[100005],ind,res,zapas,czas=0,wartosc,k; string s; int main(){ cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); cin>>z; for(int h=1;h<=z;h++){ cin>>n>>s; for(int i=0;i<s.size();i++){ //zliczanie zer w ciagach zer if(ind>0)zapas=ind; if(s[i]=='0')x=0; else x=1; if((x==0)&&(ciag%2==0))ciag++; else if(x==1&&ciag%2==1){ ciag++; ind++; licz=0; } if(x==0){ if(ciag==1)lsl++; else if(ciag%2==1){ licz++; wart[ind]=licz; } } } k=n-1; while(s[k]=='0'){ lsp++; k--; } if(lsp>=1){ wart[ind]=0; ind--; } //cout<<wart[ind-1]<<endl<<lsp; if(lsl==n){ cout<<0<<endl; res=0; ind=0; czas=0; licz=0; ciag=1; lsp=0; lsl=0; wartosc=0; zapas=0; n=0; x=0; k=0; continue; } sort(wart,wart+ind+1); while(lsp-czas>0||lsl-czas>0||wart[ind]-czas*2>0){ if(lsl>lsp){ if(wart[ind]>lsl*2){ if(wart[ind]-czas*2<=2){ res++; czas++; ind--; } else{ res+=max(0,wart[ind]-czas*2-1); ind--; czas+=2; } } else { res+=max(lsl-czas,0); czas++; lsl=0; } } else { if(wart[ind]>lsp*2){ if(wart[ind]-czas*2<=2){ res++; czas++; ind--; } else{ res+=max(0,wart[ind]-czas*2-1); ind--; czas+=2; } } else { res+=max(0,lsp-czas); czas++; lsp=0; } } } for(int i=0;i<=n;i++)wart[i]=0; cout<<n-res<<endl; res=0; ind=0; czas=0; licz=0; ciag=1; lsp=0; lsl=0; wartosc=0; zapas=0; n=0; x=0; k=0; } } |