#include <bits/stdc++.h> using namespace std; vector <pair <int,int> > kolejne[100007]; int n1[100007]; int wynik4[100007]; int main(){ ios_base::sync_with_stdio(0); cin.tie(NULL); int n; cin >> n; char c; for (int i = 0; i < n; ++i){ cin >> n1[i]; int licznik = 0; int itet = 0; for (int j = 0; j < n1[i]; ++j){ cin >> c; if (c == '0'){ licznik++; } else{ kolejne[i].push_back(make_pair(licznik, itet)); licznik = 0; itet++; } } if (licznik != 0){ kolejne[i].push_back(make_pair(licznik, itet)); itet++; } if (licznik == n1[i]){ if (c == '1'){ wynik4[i] = 2; } if (c == '0'){ wynik4[i] = 1; } } } for (int i = 0; i < n; ++i){ int wynik = 0; int iter = 0; if (wynik4[i] == 1){ cout << 0 << "\n"; continue; } if (wynik4[i] == 2){ cout << n1[i] << "\n"; continue; } if (kolejne[i][0].first > 1){ wynik += kolejne[i][0].first; iter++; } if (kolejne[i][kolejne[i].size()-1].first > 2){ wynik = wynik + kolejne[i][kolejne[i].size()-1].first - 1; iter++; } int iter1 = iter; sort (kolejne[i].begin(), kolejne[i].end()); for (int j = 0; j < kolejne[i].size(); ++j){ if (kolejne[i][j].second != 0 && kolejne[i][j].second != kolejne[i].size()-1){ if (kolejne[i][j].first - 2*iter > 2){ wynik += kolejne[i][j].first - 2*iter - 1; iter += 2; } } } if (iter1 == iter){ wynik++; } cout << n1[i] - wynik << "\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 | #include <bits/stdc++.h> using namespace std; vector <pair <int,int> > kolejne[100007]; int n1[100007]; int wynik4[100007]; int main(){ ios_base::sync_with_stdio(0); cin.tie(NULL); int n; cin >> n; char c; for (int i = 0; i < n; ++i){ cin >> n1[i]; int licznik = 0; int itet = 0; for (int j = 0; j < n1[i]; ++j){ cin >> c; if (c == '0'){ licznik++; } else{ kolejne[i].push_back(make_pair(licznik, itet)); licznik = 0; itet++; } } if (licznik != 0){ kolejne[i].push_back(make_pair(licznik, itet)); itet++; } if (licznik == n1[i]){ if (c == '1'){ wynik4[i] = 2; } if (c == '0'){ wynik4[i] = 1; } } } for (int i = 0; i < n; ++i){ int wynik = 0; int iter = 0; if (wynik4[i] == 1){ cout << 0 << "\n"; continue; } if (wynik4[i] == 2){ cout << n1[i] << "\n"; continue; } if (kolejne[i][0].first > 1){ wynik += kolejne[i][0].first; iter++; } if (kolejne[i][kolejne[i].size()-1].first > 2){ wynik = wynik + kolejne[i][kolejne[i].size()-1].first - 1; iter++; } int iter1 = iter; sort (kolejne[i].begin(), kolejne[i].end()); for (int j = 0; j < kolejne[i].size(); ++j){ if (kolejne[i][j].second != 0 && kolejne[i][j].second != kolejne[i].size()-1){ if (kolejne[i][j].first - 2*iter > 2){ wynik += kolejne[i][j].first - 2*iter - 1; iter += 2; } } } if (iter1 == iter){ wynik++; } cout << n1[i] - wynik << "\n"; } } |