#include <iostream>
#include <vector>
#include <string>
#include <queue>
using namespace std;
int main() {
int Z;
cin >> Z;
for (int j = 0; j < Z; j++){
int n;
cin >> n;
string w;
cin >> w;
int licznik = 0;
priority_queue <int> ciag;
ciag.push(0);
int pocz = 0;
int kon = 0;
int lj = 0;
for (int i = 0; i < n; i++){
if(i==n-1){
if(w[i]=='1'){
if (lj == 0){
kon = licznik;
}else{
ciag.push(licznik);
kon=0;
lj++;
}
}else{
kon=licznik+1;
}
}else if(w[i] == '0'){
licznik++;
}else if(w[i] == '1'){
if(lj == 0){
pocz = licznik;
licznik = 0;
}else{
ciag.push(licznik);
licznik = 0;
}
lj++;
}
}
if(kon == n){
cout << "0\n";
continue;
}
int wyjscie = 0;
int dni = 0;
bool spr;
while (1){
int top = ciag.top() - dni*2;
if (top <= 0 && kon-dni <= 0 && pocz-dni <= 0){
break;
}
if (top != 1) {
spr = false;
top--;
}else{
spr = true;
}
if ((top > kon-dni+1 && top > pocz-dni+1) || (kon - dni <= 0 && pocz - dni <= 0)){
if (spr == true) {
wyjscie += top;
}else{
wyjscie += top;
dni++;
}
ciag.pop();
}else if (pocz >= kon){
wyjscie += pocz-dni;
pocz = 0;
}else if (kon > pocz){
wyjscie += kon-dni;
kon = 0;
}
dni++;
}
cout << n-wyjscie << endl;
}
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 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 | #include <iostream> #include <vector> #include <string> #include <queue> using namespace std; int main() { int Z; cin >> Z; for (int j = 0; j < Z; j++){ int n; cin >> n; string w; cin >> w; int licznik = 0; priority_queue <int> ciag; ciag.push(0); int pocz = 0; int kon = 0; int lj = 0; for (int i = 0; i < n; i++){ if(i==n-1){ if(w[i]=='1'){ if (lj == 0){ kon = licznik; }else{ ciag.push(licznik); kon=0; lj++; } }else{ kon=licznik+1; } }else if(w[i] == '0'){ licznik++; }else if(w[i] == '1'){ if(lj == 0){ pocz = licznik; licznik = 0; }else{ ciag.push(licznik); licznik = 0; } lj++; } } if(kon == n){ cout << "0\n"; continue; } int wyjscie = 0; int dni = 0; bool spr; while (1){ int top = ciag.top() - dni*2; if (top <= 0 && kon-dni <= 0 && pocz-dni <= 0){ break; } if (top != 1) { spr = false; top--; }else{ spr = true; } if ((top > kon-dni+1 && top > pocz-dni+1) || (kon - dni <= 0 && pocz - dni <= 0)){ if (spr == true) { wyjscie += top; }else{ wyjscie += top; dni++; } ciag.pop(); }else if (pocz >= kon){ wyjscie += pocz-dni; pocz = 0; }else if (kon > pocz){ wyjscie += kon-dni; kon = 0; } dni++; } cout << n-wyjscie << endl; } return 0; } |
English