#include <bits/stdc++.h> using namespace std; bool cmp (int i,int j) { return (i>j); } int main() { //cout <<"xD"; int N; cin >> N; char c; for (int i = 0; i < N; i++){ int n; vector<int> v = {0}; cin >> n; bool prev = true; for (int j = 0; j < n; j++){ cin >> c; if (c == '0') { if (prev) v.back()++; else v.push_back(1); prev = true; } else prev = false; } if (c == '1') v.push_back(0); if (v.size() == 1) {cout << "0\n"; continue;} int left = v.front(), right = v.back(); sort(v.begin() + 1, v.end() - 1, cmp); int index = 1, turn = 0, score = 0; while ((index < v.size() - 1 && v[index] - 2*turn > 0) || left - turn > 0 || right - turn > 0 ){ if (v[index] - 2*turn > left - turn && v[index] - 2*turn > right - turn){ if (v[index] - 2*turn > 1) score += v[index] - 2*turn - 1; else score += 1; //cout <<"SCORE(center): " << score << endl; turn++; index++; } else if (left > right){ score += left - turn; //cout <<"SCORE(left): " << score << endl; left = -1; } else{ score += right - turn; //cout <<"SCORE(right): " << score << endl; right = -1; } turn++; } cout << n - score << 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 | #include <bits/stdc++.h> using namespace std; bool cmp (int i,int j) { return (i>j); } int main() { //cout <<"xD"; int N; cin >> N; char c; for (int i = 0; i < N; i++){ int n; vector<int> v = {0}; cin >> n; bool prev = true; for (int j = 0; j < n; j++){ cin >> c; if (c == '0') { if (prev) v.back()++; else v.push_back(1); prev = true; } else prev = false; } if (c == '1') v.push_back(0); if (v.size() == 1) {cout << "0\n"; continue;} int left = v.front(), right = v.back(); sort(v.begin() + 1, v.end() - 1, cmp); int index = 1, turn = 0, score = 0; while ((index < v.size() - 1 && v[index] - 2*turn > 0) || left - turn > 0 || right - turn > 0 ){ if (v[index] - 2*turn > left - turn && v[index] - 2*turn > right - turn){ if (v[index] - 2*turn > 1) score += v[index] - 2*turn - 1; else score += 1; //cout <<"SCORE(center): " << score << endl; turn++; index++; } else if (left > right){ score += left - turn; //cout <<"SCORE(left): " << score << endl; left = -1; } else{ score += right - turn; //cout <<"SCORE(right): " << score << endl; right = -1; } turn++; } cout << n - score << endl; } return 0; } |