Pagini recente » Istoria paginii runda/winners31/clasament | Cod sursa (job #422915) | Cod sursa (job #695438) | Istoria paginii runda/pre106/clasament | Cod sursa (job #2371870)
#include <fstream>
using namespace std;
ifstream fin("perle.in");
ofstream fout("perle.out");
int n,i,k,v[10010];
bool ok;
int A(),B(),C();
int main() {
fin>>n;
while (n--) {
fin>>k;
for (i=1;i<=k;i++)
fin>>v[i];
i=1, ok=A();
if (i==k+1&&ok)
fout<<"1\n";
else {
i=1, ok=B();
if (i==k+1&&ok)
fout<<"1\n";
else {
i=1, ok=C();
if (i==k+1&&ok)
fout<<"1\n";
else
fout<<"0\n";
}
}
}
return 0;
}
int A() { //A->1|2|3
if (i==k+1)
return 0;
if (v[i]==1||v[i]==2||v[i]==3) {
i++;
return 1;
}
return 0;
}
int B() { //B->2B|1A3AC
if (i==k+1)
return 0;
if (v[i]==2) {
i++;
return B();
}
else if (v[i]==1) {
i++;
if (!A()||v[i]!=3)
return 0;
i++;
if (!A())
return 0;
return C();
}
}
int C() { //2|3BC|12A
if (i==k+1)
return 0;
if (v[i]==2) {
i++;
return 1;
}
if (v[i]==3) {
i++;
if (!B())
return 0;
i++;
return C();
}
if (v[i]!=1)
return 0;
i++;
if (v[i]!=2) {
i++;
return 0;
}
i++;
return A();
}