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