Pagini recente » Cod sursa (job #1721880) | Cod sursa (job #1786540) | Cod sursa (job #757856) | Istoria paginii utilizator/eugenio169 | Cod sursa (job #152964)
Cod sursa(job #152964)
#include <fstream.h>
ifstream f("perle.in");
ofstream g("perle.out");
int sir[10003],sir2[10003],n;
void init()
{
int i;
for (i=1;i<=10002;i++)
{
sir[i]=0;
sir2[i]=0;
}
}
int sw,l,imax;
void transf_b(int a)
{
int i,j;
if (a==l)
sw=1; // nu se poate realiza transformarea pt ca perla B se transforma in 2 perle
else
if (sir[a]==2) // perla B se poate trasforma in 2B
{
for (j=imax;j>a;j--)
sir2[j+2]=sir2[j];
sir2[a]=2;
sir2[a+1]=5;
imax=imax+1;
}
else
if (sir[a]==1) // perla B se poate transforma in 1A3AC
{
for (j=imax;j>a;j--)
sir2[j+5]=sir2[j];
sir2[a]=1;
sir2[a+1]=4;
sir2[a+2]=3;
sir2[a+3]=4;
sir2[a+4]=6;
imax=imax+4;
}
else
sw=1;
if (imax>l) // daca s-a depasit lungimea sirului nu exista solutie
sw=1;
}
void transf_c(int a)
{
int j;
if (sir[a]==2)
sir2[a]=2;
else
if (sir[a]==3)
{
for (j=imax;j>a;j--)
sir2[j+3]=sir2[j];
sir2[a]=3;
sir2[a+1]=5;
sir2[a+2]=6;
imax=imax+2;
}
else
if (sir[a]==1)
{
for (j=imax;j>a;j--)
sir2[j+3]=sir2[j];
sir2[a]=1;
sir2[a+1]=2;
sir2[a+2]=4;
imax=imax+2;
}
else
sw=1;
if (imax>l)
sw=1;
}
int rez()
{
if (l==1 && sir[1]<=3)
return 1;
else
if (l>=2 && sir[1]==2)
{ // A=4, B=5, C=6;
sir2[1]=2;
sir2[2]=5;
imax=2;
}
else
if (l>3 && sir[1]==1)
{
sir2[1]=1;
sir2[2]=4;
sir2[3]=3;
sir2[4]=4;
sir2[5]=6;
imax=5;
}
else
if (sir[1]==3)
{
sir2[1]=6;
imax=1;
}
else
if (sir[1]==1 && sir[2]==2 && n==3)
{
sir2[1]=1;
sir2[2]=2;
sir2[3]=4;
imax=3;
}
if (sir2[1]==0)
return 0; // nu exista perla magica de inceput
int i,j;
i=1;
sw=0;
while (i<=l && sw==0)
{
if (sir2[i]==5)
transf_b(i);
else
if (sir2[i]==6)
transf_c(i);
i++;
}
if (sw==1)
return 0;
else
return 1;
}
main()
{
f>>n;
int k,a;
for (k=1;k<=n;k++)
{
init();
f>>l;
for (a=1;a<=l;a++)
f>>sir[a];
g<<rez()<<"\n";
for (a=1;a<=l;a++)
g<<sir[a]<<" "<<sir2[a]<<"\n";
g<<"\n";
}
}