#include <iostream> #include <vector> #include <algorithm> using namespace std; const int maxN = 100000; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int t, n, first, last, curr; cin >> t; char c; while (t-- > 0) { cin >> n; first = last = -1; curr = 0; vector<int> v; for(int i=0; i<n; i++){ cin>>c; if(c == '1'){ if(first == -1){ first = curr; } else{ if(curr > 0) v.push_back(curr); } curr = 0; } else { curr++; } } last = curr; sort(v.begin(), v.end()); int result =0; int time = 0; // cout<<"line nr: "<<t<<", first: "<<first<<", last: "<< last <<", inside: "; // for(int i=0; i<v.size(); i++) // cout<<v[i]<<", "; for(int i = v.size() - 1; i > 0; i--){ if(first > v[i] / 2 && first > time){ result += first - time; first = -1; time ++; } if(last > v[i] / 2 && last > time){ result += last - time; last = -1; time ++; } if(v[i] - 2 * time - 1 <= 0) break; result += max(0, v[i] - 2 * time - 1); time += 2; } if(last > time){ result += last - time; time ++; } if(first > time){ result += first - time; time ++; } // cout<<" -->> "<< n - result <<"\n"; // cout<<"\n"; cout<<n-result<<"\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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; const int maxN = 100000; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int t, n, first, last, curr; cin >> t; char c; while (t-- > 0) { cin >> n; first = last = -1; curr = 0; vector<int> v; for(int i=0; i<n; i++){ cin>>c; if(c == '1'){ if(first == -1){ first = curr; } else{ if(curr > 0) v.push_back(curr); } curr = 0; } else { curr++; } } last = curr; sort(v.begin(), v.end()); int result =0; int time = 0; // cout<<"line nr: "<<t<<", first: "<<first<<", last: "<< last <<", inside: "; // for(int i=0; i<v.size(); i++) // cout<<v[i]<<", "; for(int i = v.size() - 1; i > 0; i--){ if(first > v[i] / 2 && first > time){ result += first - time; first = -1; time ++; } if(last > v[i] / 2 && last > time){ result += last - time; last = -1; time ++; } if(v[i] - 2 * time - 1 <= 0) break; result += max(0, v[i] - 2 * time - 1); time += 2; } if(last > time){ result += last - time; time ++; } if(first > time){ result += first - time; time ++; } // cout<<" -->> "<< n - result <<"\n"; // cout<<"\n"; cout<<n-result<<"\n"; } } |