#include <iostream> #include <string> #include <algorithm> #include <vector> using namespace std; int zrob_test() { int n; string s; cin >> n; cin >> s; vector<int> dziury; int licznik = 0; if(s[0] == '1') dziury.push_back(0); for(int i = 0; i < s.length(); i++) { if(s[i] == '0') licznik++; else { if(licznik>0) dziury.push_back(licznik); licznik = 0; } } if(dziury.size() == 0) return 0; int dzien = 0; int uratowanych = 0; int lewy = dziury[0]; int prawy = licznik; if(lewy < prawy) { lewy = licznik; prawy = dziury[0]; } sort(dziury.begin()+1, dziury.end()); if(lewy > 1 || dziury.size() == 1) { dzien++; uratowanych += dziury[0]; if(prawy > 2 || dziury.size() == 1 || dziury[dziury.size()-1] <= 2) { uratowanych += prawy-1; dzien++; } } for(int i = dziury.size()-1; i >= 1; i--) { if(dziury[i] - 2*dzien <= 0) return n-uratowanych; if(dziury[i] - 2*dzien == 1) return n-(uratowanych+1); uratowanych += dziury[i] - 2*dzien-1; dzien += 2; } return n-uratowanych; } int main() { int t; cin >> t; for(int it = 0; it < t; it++) cout << zrob_test() << 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 | #include <iostream> #include <string> #include <algorithm> #include <vector> using namespace std; int zrob_test() { int n; string s; cin >> n; cin >> s; vector<int> dziury; int licznik = 0; if(s[0] == '1') dziury.push_back(0); for(int i = 0; i < s.length(); i++) { if(s[i] == '0') licznik++; else { if(licznik>0) dziury.push_back(licznik); licznik = 0; } } if(dziury.size() == 0) return 0; int dzien = 0; int uratowanych = 0; int lewy = dziury[0]; int prawy = licznik; if(lewy < prawy) { lewy = licznik; prawy = dziury[0]; } sort(dziury.begin()+1, dziury.end()); if(lewy > 1 || dziury.size() == 1) { dzien++; uratowanych += dziury[0]; if(prawy > 2 || dziury.size() == 1 || dziury[dziury.size()-1] <= 2) { uratowanych += prawy-1; dzien++; } } for(int i = dziury.size()-1; i >= 1; i--) { if(dziury[i] - 2*dzien <= 0) return n-uratowanych; if(dziury[i] - 2*dzien == 1) return n-(uratowanych+1); uratowanych += dziury[i] - 2*dzien-1; dzien += 2; } return n-uratowanych; } int main() { int t; cin >> t; for(int it = 0; it < t; it++) cout << zrob_test() << endl; return 0; } |