Cod sursa(job #2935856)

Utilizator matthriscuMatt . matthriscu Data 7 noiembrie 2022 16:55:58
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>
using namespace std;

#define LMAX 10005

int arr[LMAX], idx, n;

bool solve_a();
bool solve_b();
bool solve_c();

bool solve_a() {
	if (idx > n)
		return false;
	++idx;
	return true;
}

bool solve_b() {
	if (idx > n)
		return false;
	
	if (arr[idx] == 1) {
		++idx;
		if (!solve_a())
			return false;
		if (idx > n || arr[idx] != 3)
			return false;
		++idx;
		return solve_a() && solve_c();
	}

	if (arr[idx] == 2) {
		++idx;
		return solve_b();
	}

	return false;
}

bool solve_c() {
	if (idx > n)
		return false;

	if (arr[idx] == 1) {
		++idx;
		if (idx > n || arr[idx] != 2)
			return false;
		++idx;
		return solve_a();
	}

	if (arr[idx] == 2) {
		++idx;
		return true;
	}

	++idx;
	return solve_b() && solve_c();
}

int main() {
	freopen("perle.in", "r", stdin);
	freopen("perle.out", "w", stdout);

	int T;
	cin >> T;

	for (int t = 1; t <= T; ++t) {
		cin >> n;

		for (int i = 1; i <= n; ++i)
			cin >> arr[i];

		idx = 1;
		if (solve_a() && idx > n) {
			cout << "1\n";
			continue;
		}

		idx = 1;
		if (solve_b() && idx > n) {
			cout << "1\n";
			continue;
		}

		idx = 1;
		if (solve_c() && idx > n) {
			cout << "1\n";
			continue;
		}

		cout << "0\n";
	}
}