Cod sursa(job #2935837)

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

ifstream fin("perle.in");
ofstream fout("perle.out");

enum type { A, B, C };

#define LMAX 10005
char buf[LMAX];

bool solve_a(char *s, int len, int& idx);
bool solve_b(char *s, int len, int& idx);
bool solve_c(char *s, int len, int& idx);

bool solve_a(char *s, int len, int& idx) {
	if (idx >= len)
		return false;
	++idx;
	return true;
}

bool solve_b(char *s, int len, int& idx) {
	if (idx >= len)
		return false;

	if (s[idx] == '2')
		return solve_b(s, len, ++idx);
	
	if (s[idx] == '3') {
		++idx;
		return false;
	}

	if (!solve_a(s, len, ++idx))
		return false;
	if (s[idx++] != '3')
		return false;

	return solve_a(s, len, idx) && solve_c(s, len, idx);
}

bool solve_c(char *s, int len, int& idx) {
	if (idx >= len)
		return false;

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

	if (s[idx] == '1') {
		idx += 3;
		if (s[idx - 2] == '2')
			return true;
		return false;
	}

	return solve_b(s, len, idx) && solve_c(s, len, idx);
}

void solve() {
	int l;
	fin >> l;

	for (int i = 0; i < l; ++i)
		fin >> buf[i];

	buf[l] = '\0';

	int idx1 = 0, idx2 = 0, idx3;
	if ((solve_a(buf, l, idx1) && idx1 >= l) ||
		(solve_b(buf, l, idx2) && idx2 >= l) ||
		(solve_c(buf, l, idx3) && idx3 >= l))
		cout << "1\n";
	else
		cout << "0\n";
}

int main() {
	int n;
	fin >> n;

	while (n--)
	solve();
}