Cod sursa(job #3331323)

Utilizator Cezar2009Cezar Mihai Titihazan Cezar2009 Data 26 decembrie 2025 18:08:02
Problema Perle Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.03 kb
//https://www.infoarena.ro/problema/perle

//#pragma GCC optimize("O3")   
//#pragma GCC optimize("Ofast") 
//#pragma GCC optimize("fast-math") 
//#pragma GCC optimize("unroll-loops") 
//#pragma GCC optimize("inline")  
//#define _USE_MATH_DEFINES
//#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <fstream>
//#include <vector>
//#include <cstring>
//#include <cmath>
//#include <bitset>
#include <queue>
//#include <stack>
//#include <utility>
//#include <algorithm>
//#include <string>
//#include <map>
//#include <unordered_map>
//#include <set>
//#include <unordered_set>
//#include <cstdint>
//#include <climits>
//#include <iomanip>
//#include <cstdio>
//#include <tuple>

using namespace std;

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

string v;

bool verif()
{
	queue<string> q;
	q.push("A");
	q.push("B");
	q.push("C");


	while (!q.empty())
	{
		string s = q.front();
		q.pop();

		if (s.size() > v.size())
			continue;

		if (s == v)
			return true;

		for (int i = 0; i < (int)s.size(); ++i)
		{
			if (s[i] == 'A')
			{
				q.push(s.substr(0, i) + '1' + s.substr(i + 1));
				q.push(s.substr(0, i) + '2' + s.substr(i + 1));
				q.push(s.substr(0, i) + '3' + s.substr(i + 1));
			}
			else if (s[i] == 'B')
			{
				q.push(s.substr(0, i) + "2B" + s.substr(i + 1));
				q.push(s.substr(0, i) + "1A3AC" + s.substr(i + 1));
			}
			else if (s[i] == 'C')
			{
				q.push(s.substr(0, i) + '2' + s.substr(i + 1));
				q.push(s.substr(0, i) + "3BC" + s.substr(i + 1));
				q.push(s.substr(0, i) + "12A" + s.substr(i + 1));
			}
		}
	}

	return false;
}

int main()
{
	//ios_base::sync_with_stdio(false);
	//cin.tie(nullptr);
	//cout.tie(nullptr);

	int n, nr, i;

	fin >> n;

	// as vrea ceva recursiv de ia un sir pe perle si spune fiecare in ce se poate transofma

	while (n--)
	{
		fin >> nr;

		v.clear();
		for (i = 1; i <= nr; ++i)
		{
			int x;
			fin >> x;
			v += ('0' + x);
		}

		fout << verif() << "\n";
	}
	
	return 0;
}