Cod sursa(job #2437614)
Utilizator | Data | 9 iulie 2019 20:52:01 | |
---|---|---|---|
Problema | Perle | Scor | 70 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 2.69 kb |
#include <stdio.h>
#define DIM 10005
using namespace std;
FILE *fin = fopen("perle.in", "r");
FILE *fout = fopen("perle.out", "w");
int T,n,valid[2],stiva[2][3*DIM],vf[2],x,i;
int main()
{
fscanf(fin, "%d", &T);
while(T)
{
fscanf(fin, "%d", &n);
if(n == 1)
{
fprintf(fout, "1\n");
--T;
continue;
}
valid[0] = valid[1] = 1;
vf[0] = vf[1] = 0;
stiva[0][0] = 5;
stiva[1][0] = 6;
while(n)
{
fscanf(fin, "%d", &x);
for(i=0; i<2; ++i)
{
if(!valid[i])
continue;
if(vf[i] < 0)
{
valid[i] = 0;
continue;
}
if(stiva[i][vf[i]] == x)
{
--vf[i];
continue;
}
if(stiva[i][vf[i]] < 4 and stiva[i][vf[i]] != x)
{
valid[i] = 0;
continue;
}
if(stiva[i][vf[i]] == 4)
--vf[i];
else
if(stiva[i][vf[i]] == 5)
if(x == 3)
valid[i] = 0;
else
if(x == 1)
{
--vf[i];
stiva[i][++vf[i]] = 6;
stiva[i][++vf[i]] = 4;
stiva[i][++vf[i]] = 3;
stiva[i][++vf[i]] = 4;
}
else; //x = 2
else // stiva[i][vf[i]] = 6
if(x == 2)
--vf[i];
else
if(x == 1)
{
--vf[i];
stiva[i][++vf[i]] = 4;
stiva[i][++vf[i]] = 2;
}
else //x = 3
{
--vf[i];
stiva[i][++vf[i]] = 6;
stiva[i][++vf[i]] = 5;
}
}
--n;
}//while n
if((valid[0] and vf[0] == -1) or (valid[1] and vf[1] == -1))
fprintf(fout, "1\n");
else
fprintf(fout, "0\n");
--T;
}//while T
return 0;
}