Pagini recente » Cod sursa (job #1974812) | Istoria paginii utilizator/fight4kisses | Cod sursa (job #2100135) | Cod sursa (job #198474) | Cod sursa (job #1066801)
#include <fstream>
using namespace std;
//A -> 1 | 2 | 3
//B -> 2B | 1A3AC
//C -> 2 | 3BC | 12A
ifstream fin ("perle.in");
ofstream fout ("perle.out");
const int N = 10010;
short v[N], n, crt, t;
bool A();
bool B();
bool C();
bool A() {
if (v[crt])
return 1;
}
bool B() {
if (v[crt] == 2) {
crt++;
return B();
}
if (v[crt] == 1) {
bool ok = 1; crt++;
ok |= A(); crt++;
if (v[crt] != 3) return 0;
crt++;
ok |= A(); crt++;
ok |= C(); crt++;
return ok;
}
return 0;
}
bool C() {
if (v[crt] == 2)
return 1;
if (v[crt] == 3) {
crt++;
bool ok = 1;
ok |= B(); crt++;
ok |= C(); crt++;
return ok;
}
if (v[crt] == 1 && v[crt+1] == 2) {
crt += 2;
return A();
}
return 0;
}
bool solve() {
if (n == 1)
return 1;
if (v[crt] == 2 || (v[crt] == 1 && v[crt+2] == 3))
return B();
if (v[crt] == 3 || (v[crt] == 1 && v[crt+1] == 2))
return C();
return 0;
}
int main() {
fin >> t;
while (t--) {
fin >> n;
crt = 0;
for (short i = 0; i < n; ++i)
fin >> v[i];
fout << solve() << "\n";
}
}