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