Pagini recente » Cod sursa (job #2310590) | Cod sursa (job #1024168) | Cod sursa (job #952530) | Cod sursa (job #980288) | Cod sursa (job #1086527)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("perle.in");
ofstream fout("perle.out");
const int MAXN = 10100;
int n, sir[MAXN];
bool make_sol(char c);
bool get_sol() {
int rez = 0;
rez |= make_sol('A');
rez |= make_sol('B');
rez |= make_sol('C');
return rez;
}
bool make_sol(char c) {
int pointer = 0, last2 = 0;
string sol;
sol.push_back(c);
while (pointer < n && (pointer < sol.size() || last2)) {
if (pointer > sol.size()) {
sol += 'C';
--last2;
}
switch (sol[pointer]) {
case 'B':
sol.erase(pointer, 1);
if (sir[pointer] == 3) return 0;
else if (sir[pointer] == 2) sol += "2B";
else if (sir[pointer] == 1) sol += "1A3AC";
break;
case 'C':
sol.erase(pointer, 1);
if (sir[pointer] == 2) sol += "2";
else if (sir[pointer] == 3) {
sol += '3B';
++last2;
}
else if (sir[pointer] == 1) sol += "12A";
break;
default:
if (sol[pointer] != 'A' && (int)sol[pointer] - '0' != sir[pointer])
return 0;
}
++pointer;
}
if (sol.size() != n)
return 0;
return 1;
}
int main() {
int t;
fin >> t;
for (; t; --t) {
fin >> n;
for (int i = 0; i < n; ++i)
fin >> sir[i];
fout << get_sol() << "\n";
}
return 0;
}