Pagini recente » Cod sursa (job #371298) | Cod sursa (job #2961746) | Cod sursa (job #2137891) | Cod sursa (job #215854) | Cod sursa (job #3282605)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("perle.in");
ofstream g ("perle.out");
const int CMAX = 10000;
int N, lgS, ptr, V[CMAX+1];
bool okA, okB, okC, ok;
bool A();
bool B();
bool C();
bool A() {
if (ptr > lgS) return 0;
if (V[ptr] == 1 || V[ptr] == 2 || V[ptr] == 3) {
ptr++;
return 1;
} else
return 0;
}
bool B() {
if (ptr > lgS) return 0;
if (V[ptr] == 2) {
ptr++;
return B();
} else if (V[ptr] == 1) {
ptr++;
bool ok = A();
if (!ok || V[ptr] != 3) return 0;
ptr++;
ok = A();
if (!ok) return 0;
return C();
} else
return 0;
}
bool C() {
if (ptr > lgS) return 0;
if (V[ptr] == 2) {
ptr++;
return 1;
} else if (V[ptr] == 1) {
ptr++;
if (V[ptr] == 2) {
ptr++;
return A();
} else {
ptr++;
return 0;
}
} else {
ptr++;
bool ok = B();
if (!ok) return 0;
return C();
}
}
int main()
{
int x;
f >> N;
for (int i=1; i<=N; i++) {
f >> lgS;
for (int i=1; i<=lgS; i++)
f >> V[i];
//
ok = 0;
ptr = 1;
if (A() == 1 && ptr == lgS+1) ok = 1;
ptr = 1;
if (B() == 1 && ptr == lgS+1) ok = 1;
ptr = 1;
if (C() == 1 && ptr == lgS+1) ok = 1;
//
g << ok << '\n';
}
f.close();
g.close();
return 0;
}
/**
<A> := 1 | 2 | 3
<B> := 2<B> | 1<A>3<A><C>
<C> := 2 | 3<B><C> | 12<A>
*/