Cod sursa(job #2145728)
Utilizator | Data | 27 februarie 2018 16:22:21 | |
---|---|---|---|
Problema | Perle | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.87 kb |
#include <cstdio>
using namespace std;
int v[10005];
int l;
int ok=0;
int poz;
bool transforma();
bool transformb();
bool transformc();
bool transforma()
{
if(poz<=l){
poz++;
return 1;
}
else
return 0;
}
bool transformb()
{
if(ok==1)
return 0;
else{
if(poz>l){
ok=1;
}
if(v[poz]==1){
poz++;
if(transforma()==1){
if(v[poz]==3){
poz++;
if(transforma()==1){
if(transformc()==1){
return 1;
}
else
ok=1;
}
else
ok=1;
}
else
ok=1;
}
else
ok=1;
}
else{
if(v[poz]==2){
poz++;
return transformb();
}
else
ok=1;
}
if(ok==1)
return 0;
}
}
bool transformc()
{
if(ok==1)
return 0;
else{
if(poz>l)
ok=1;
if(v[poz]==1){
poz++;
if(v[poz]==2){
poz++;
if(transforma()==1){
return 1;
}
else
ok=1;
}
else
ok=1;
}
else{
if(v[poz]==2){
poz++;
return 1;
}
else{
if(v[poz]==3){
poz++;
if(transformb()==1){
if(transformc()==1){
return 1;
}
else
ok=1;
}
else
ok=1;
}
}
}
if(ok==1)
return 0;
}
}
int main()
{ freopen("perle.in", "r",stdin);
freopen("perle.out", "w",stdout);
int n,i,j;
scanf("%d\n", &n);
for(i=1; i<=n; i++){
scanf("%d ", &l);
for(j=1; j<=l; j++)
scanf("%d", &v[j]);
ok=0;
poz=1;
transforma();
if(ok==0 && poz>l)
printf("1\n");
else{
ok=0;
poz=1;
transformb();
if(ok==0 && poz>l)
printf("1\n");
else{
ok=0;
poz=1;
transformc();
if(ok==0 && poz>l)
printf("1\n");
else
printf("0\n");
}
}
}
return 0;
}