Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <cmath>
- #include <stack>
- #include <iomanip>
- #include <fstream>
- #include <string>
- #include <set>
- #include <deque>
- #include <queue>
- #include <map>
- #include <bitset>
- #include <random>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef long double ld;
- #define endl "\n"
- #define sqrt sqrtl
- #define all(a) a.begin(), a.end();
- const ll inf = 1e9 + 13;
- long double eps = 1e-9;
- const ll maxsz = 1e6 + 5;
- void solve() {
- string s;
- ll i, j;
- cin >> s;
- vector <vector <ll> > a(5 + 1);
- vector <vector <ll> > b(5 + 1);
- ll pos1 = 1, pos2 = 1;
- a[0] = { 0 };
- b[0] = { 0 };
- for (i = 0; i < s.size(); i++) {
- if (i % 2 == 0) {
- char t = s[i];
- vector <ll> now;
- for (j = 0; j < a[pos1 - 1].size(); j++) {
- if (t == '0') {
- now.push_back(a[pos1 - 1][j]);
- }
- else if (t == '1') {
- now.push_back(a[pos1 - 1][j] + 1);
- }
- else {
- now.push_back(a[pos1 - 1][j]);
- now.push_back(a[pos1 - 1][j] + 1);
- }
- }
- a[pos1] = now;
- pos1++;
- }
- else {
- char t = s[i];
- vector <ll> now;
- for (j = 0; j < b[pos2 - 1].size(); j++) {
- if (t == '0') {
- now.push_back(b[pos2 - 1][j]);
- }
- else if (t == '1') {
- now.push_back(b[pos2 - 1][j] + 1);
- }
- else {
- now.push_back(b[pos2 - 1][j]);
- now.push_back(b[pos2 - 1][j] + 1);
- }
- }
- b[pos2] = now;
- pos2++;
- }
- }
- vector <ll> s1(5 + 1);
- vector <ll> s2(5 + 1);
- for (i = 1; i <= 5; i++) {
- pair <ll, ll> f = { inf,-inf }, s = { inf, -inf };
- for (j = 0; j < a[i].size(); j++) {
- if (a[i][j] < f.first) {
- f.first = a[i][j];
- }
- if (a[i][j] > f.second) {
- f.second = a[i][j];
- }
- }
- for (j = 0; j < b[i].size(); j++) {
- if (b[i][j] < s.first) {
- s.first = b[i][j];
- }
- if (b[i][j] > s.second) {
- s.second = b[i][j];
- }
- }
- if (s2[i - 1] > f.first + ((10 - (2 * i)) / 2)) {
- cout << 2 * i - 1 << endl;
- return;
- }
- if (f.second > s1[i - 1] + ((10 - 2 * i) / 2 + 1)) {
- cout << 2 * i - 1 << endl;
- return;
- }
- if (f.second > s.first + (10 - 2 * i) / 2) {
- cout << 2 * i << endl;
- return;
- }
- if (s.second > f.first + ((10 - 2 * i) / 2)) {
- cout << 2 * i << endl;
- return;
- }
- s1[i] = s.first;
- s2[i] = s.second;
- }
- cout << 10 << endl;
- }
- signed main() {
- #ifdef _DEBUG
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- ios_base::sync_with_stdio(0);
- cin.tie(NULL);
- cout.tie(NULL);
- ll t;
- cin >> t;
- while (t--) solve();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement