Cod sursa(job #840956)

Utilizator dica69Alexandru Lincan dica69 Data 23 decembrie 2012 16:17:13
Problema Perle Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>

using namespace std;

int n,l,st[2][10010],niv[2],ok[2],j,v,t,i;
int main()
{FILE *f1 = fopen("perle.in","r");
FILE *f2 = fopen("perle.out","w");
fscanf(f1,"%d",&n);
for (i=1;i<=n;i++)
{fscanf(f1,"%d",&l);
if (l==1) {fscanf(f1,"%d",&v);fprintf(f2,"1\n");}
else
{ok[0]=1;ok[1]=1;
niv[0]=1;niv[1]=1;
st[0][0]=5;st[1][0]=6;
for (j=1;j<=l;j++)
{fscanf(f1,"%d",&v);
for (t=0;t<2;t++)
{
if (ok[t])
{
if (st[t][niv[t]-1]<4) {ok[i]=(st[t][--niv[t]]==v);}
else
if (st[t][niv[t]-1]==4) niv[t]--;
else
if (st[t][niv[t]-1]==5)
{if (v==3) ok[t]=0;
if (v==1)
{niv[i]--;
st[t][niv[t]++]=6;
st[t][niv[t]++]=4;
st[t][niv[t]++]=3;
st[t][niv[t]++]=4;
}
}
else
{if (v==2) niv[t]--;
if (v==3)
{niv[t]--;
st[t][niv[t]++]=6;
st[t][niv[t]++]=5;
}
if (v==1)
{niv[t]--;
st[t][niv[t]++]=4;
st[t][niv[t]++]=2;
}
}

}
if (!niv[t] && l) ok[t]=0;

}

}

fprintf(f2,"%d\n",((!niv[0]&& ok[0]) || (!niv[1] && ok[1])));
}

}
    return 0;
}