Pagini recente » Cod sursa (job #1913878) | Cod sursa (job #103257) | Cod sursa (job #3166182) | Cod sursa (job #268075) | Cod sursa (job #159492)
Cod sursa(job #159492)
#include <fstream.h>
#define NM 100001
#define XM 1000000
int l[NM];
long dim,n=1;
char x[XM];
void strcpy(long k,int nr)
{long i;
for (i=n;i>=k;i--) x[i+nr]=x[i];
n+=nr;
}
int perle()
{ long k=0;
if (dim==1) return 1;
if (dim==2) return 0;
if (dim==3&&l[1]==1&&l[2]==2) return 1;
x[0]='0';
if (l[1]==3) x[1]='C';
else x[1]='B';
while (k<n&&k<dim)
{ k++;
if (x[k]=='B')
{ switch(l[k])
{case 1: strcpy(k,4);
x[k]='1';
x[k+1]='A';
x[k+2]='3';
x[k+3]='A';
x[k+4]='C';
break;
case 2: strcpy(k+2,1);
x[k]='2';
x[k+1]='B';
n=n+1;
break;
case 3: return 0;}
}
if (x[k]=='C')
{ switch(l[k])
{case 1: strcpy(k+3,2);
x[k]='1';
x[k+1]='2';
x[k+2]='A';
n=n+2;
break;
case 2: x[k]='2';
break;
case 3: strcpy(k+3,2);
x[k]='3';
x[k+1]='B';
x[k+2]='C';
n=n+2;
break;}
}
if (x[k]=='1'&&l[k]!=1) return 0;
if (x[k]=='2'&&l[k]!=2) return 0;
if (x[k]=='3'&&l[k]!=3) return 0;
}
if (n!=dim) return 0;
return 1;
}
int main()
{ int n,i,j;
ifstream f("perle.in");
ofstream g("perle.out");
f>>n;
for (i=1;i<=n;i++)
{ f>>dim;
for (j=1;j<=dim;j++) f>>l[j];
g<<perle()<<'\n';
}
f.close();
g.close();
return 0;
}