Pagini recente » Cod sursa (job #857350) | Cod sursa (job #469028) | Cod sursa (job #178929) | Cod sursa (job #2763349) | Cod sursa (job #1828516)
#include <fstream>
using namespace std;
const int L=10003;
ifstream f("perle.in");
ofstream g("perle.out");
int v[L],n,l;
int b[L];
bool sol=0;
void replB(int lung);
void check()
{
for(int i=1;i<=l;i++)
{
if(b[i]!=v[i])
{
return ;
}
}
sol=1;
}
void replA(int lung)
{
if(lung>l||sol==1)
{
return;
}
b[lung]=v[lung];
if(lung==l)
{
check();
}
}
void replC(int lung)
{
b[lung]=2;
if(lung==l)
{
check();
if(sol==1)
{
return;
}
}
if(lung+2<=l)
{
b[lung]=3;
replB(lung+1);
replC(lung+2);
if(sol==1)
{
return ;
}
b[lung]=1;
b[lung+1]=2;
replA(lung+2);
if(sol==1)
{
return ;
}
}
}
void replB(int lung)
{
if(sol==1)
{
return;
}
if(lung+1<=l)
{
if(v[lung]==2)
{
b[lung]=2;
replB(lung+1);
}
}
if(sol==1)
{
return;
}
if(lung+4<=l)
{
if(v[lung]==1&&v[lung+2]==3)
{
b[lung]=1;
b[lung+2]=3;
replA(lung+1);
replA(lung+3);
replC(lung+4);
}
}
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
{
f>>l;
sol=0;
for(int j=1;j<=l;j++)
{
f>>v[j];
}
replA(1);
replB(1);
replC(1);
g<<sol<<"\n";
}
f.close();
g.close();
return 0;
}