Pagini recente » IAP #2: Concurs pentru studenti | Cod sursa (job #2958147) | Cod sursa (job #3211460) | Cod sursa (job #2591237) | Cod sursa (job #1742446)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("perle.in");
ofstream g("perle.out");
int a[100001];
int v[100001];
bool rez(int k, char c, int x)
{ char z;
if(k>x) return false;
if(c=='A')
{
a[k]=v[k];
if(k-1==x) return true;
else return false;
}
if(c=='B')
{
if(v[k]==3) return false;
if(v[k]==2)
{
a[k]=2;
k++;
z='B';
return rez(k,z,x);
}
if(v[k]==1)
{
a[k]=1;
k++;
a[k]=v[k];
k++;
a[k]=3;
if(v[k]!=3) return false;
k++;
a[k]=v[k];
k++;
z='C';
return rez(k,z,x);
}
}
if(c=='C')
{
if(v[k]==2)
{
a[k]=2;
if(k==x) return true;
else return false;
}
if(v[k]==1)
{
a[k]=1;
k++;
a[k]=2;
if(v[k]!=2) return false;
k++;
a[k]=v[k];
}
if(v[k]==3)
{
a[k]=3;
k++;
z='B';
if(rez(k,z,x))
{
z='C';
return rez(k,z,x);
}
}
}
if(k>x) return false;
}
int main()
{
int n,l,i,j,r;
bool ok1,ok2,ok3;
f>>n;
for(j=1;j<=n;j++)
{
f>>l;
for(i=1;i<=l;i++)
f>>v[i];
char z='A';
int k=1;
ok1=rez(k,z,l);
z='B';
ok2=rez(k,z,l);
z='C';
ok3=rez(k,z,l);
r=ok1+ok2+ok3;
g<<r<<'\n';
}
return 0;
}