Pagini recente » Cod sursa (job #2576132) | Cod sursa (job #1929267) | Cod sursa (job #2636985) | Cod sursa (job #288956) | Cod sursa (job #3265761)
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("sse,avx,fma,avx2,bmi,bmi2,lzcnt,popcnt")
using namespace std;
using ll = long long;
using ld = long double;
class Grammar {
vector<int> v;
int was_A(int left) { return left < v.size() ? left + 1 : 0; }
int was_B(int left) {
if (left >= v.size())
return 0;
if (v[left] == 2)
return was_B(left + 1);
if (left + 4 >= v.size())
return 0;
if (v[left] == 1 && v[left + 2] == 3)
return was_C(left + 4);
return 0;
}
bool was_C(int left) {
if (left >= v.size())
return 0;
if (v[left] == 2)
return left + 1;
if (v.size() > left + 1 && v[left] == 1 && v[left + 1] == 2)
return was_A(left + 2);
if (v[left] != 3)
return false;
int curr = was_B(left + 1);
if (curr == 0)
return 0;
return was_C(curr);
}
public:
bool check(vector<int> &_v) {
v = std::move(_v);
return was_A(0) || was_B(0) || was_C(0);
}
};
void solve() {
int n;
cin >> n;
vector<int> v(n);
for (auto &x : v)
cin >> x;
Grammar g;
cout << g.check(v) << '\n';
}
int main() {
freopen("perle.in", "r", stdin);
freopen("perle.out", "w", stdout);
int t = 1;
cin >> t;
while (t--)
solve();
return 0;
}