Pagini recente » Cod sursa (job #1618087) | Istoria paginii utilizator/lacitek | Istoria paginii utilizator/mihaigavrila | Monitorul de evaluare | Cod sursa (job #651489)
Cod sursa(job #651489)
#include <cstdio>
#define NMax 10005
using namespace std;
const int A=4, B=5, C=6;
int X[NMax];
inline bool ValidA (int x)
{
if (1<=x and x<=A)
{
return true;
}
return false;
}
inline bool ValidB (int x)
{
if (x==B)
{
return true;
}
return false;
}
inline bool ValidC (int x)
{
if (x==2 or x==C)
{
return true;
}
return false;
}
inline bool Valid1 (int x)
{
if (x==1 or x==A)
{
return true;
}
return false;
}
inline bool Valid2 (int x)
{
if (x==2 or x==A or x==C)
{
return true;
}
return false;
}
inline bool Valid3 (int x)
{
if (x==3 or x==A)
{
return true;
}
}
int Evaluate (int L)
{
if (L==1)
{
return 1;
}
if (ValidB (X[L]) and Valid2 (X[L-1]))
{
X[L-1]=B;
return Evaluate (L-1);
}
if (L<3)
{
return 0;
}
if (ValidA (X[L]) and Valid2 (X[L-1]) and Valid1 (X[L-2]))
{
X[L-2]=C;
return Evaluate (L-2);
}
if (ValidC (X[L]) and ValidB (X[L-1]) and Valid3 (X[L-2]))
{
X[L-2]=C;
return Evaluate (L-2);
}
if (L<5)
{
return 0;
}
if (ValidC (X[L]) and ValidA (X[L-1]) and Valid3 (X[L-2]) and ValidA (X[L-3]) and Valid1 (X[L-4]))
{
X[L-4]=B;
return Evaluate (L-4);
}
return 0;
}
int main()
{
freopen ("perle.in", "r", stdin);
freopen ("perle.out", "w", stdout);
int T;
scanf ("%d", &T);
for (; T>0; --T)
{
int N;
scanf ("%d", &N);
for (int i=1; i<=N; ++i)
{
scanf ("%d", &X[i]);
}
printf ("%d\n", Evaluate (N));
}
return 0;
}