Cod sursa(job #1304894)
Utilizator | Data | 29 decembrie 2014 13:24:27 | |
---|---|---|---|
Problema | Perle | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.81 kb |
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("perle.in");
ofstream fout("perle.out");
int n,m,i,j,ok,x;
char v1[3][10]={"1","2","3"};
char v2[3][10]={"2B","1A3AC"};
char v3[3][10]={"2","3BC","12A"};
char s[10020],*p,sol[10020];
int main()
{
fin>>n;
for (i=1;i<=n;i++)
{
fin>>m;
for (j=0;j<m;j++)
{
fin>>x;
if (x==1)
s[j]='1';
else if (x==2)
s[j]='2';
else if (x==3)
s[j]='3';
}
s[m]=NULL;
sol[0]=NULL;
for (j=0;j<m;j++)
{
if (sol[j]==0)
{
if (j==0)
{
if (s[j]=='1')
{
if (m-j==1)
strcpy(sol,v1[0]);
else if (m-j==3)
strcpy(sol,v3[2]);
else if (m-j>=5)
strcpy(sol,v2[1]);
else ok=-1;
}
else if (s[j]=='2')
{
if (m-j==1)
strcpy(sol,v3[0]);
else if (m-j>=2)
strcpy(sol,v2[0]);
else ok=-1;
}
else if (s[j]=='3')
{
if (m-j==1)
strcpy(sol,v1[2]);
else if (m-j>=3)
strcpy(sol,v3[1]);
else ok=-1;
}
}
else
{
ok=-1;
break;
}
}
else if (sol[j]=='A')
{
if (s[j]=='1')
sol[j]='1';
else if (s[j]=='2')
sol[j]='2';
else if (s[j]=='3')
sol[j]='3';
}
else if (sol[j]=='B')
{
if (s[j]=='1')
{
if (sol[j+1]!=NULL)
*p=sol[j+1];
else
p=NULL;
strcpy(sol+j,v2[1]);
if (p!=NULL)
strcat(sol,p);
}
else if (s[j]=='2')
{
if (sol[j+1]!=NULL)
*p=sol[j+1];
else
p=NULL;
strcpy(sol+j,v2[0]);
if (p!=NULL)
strcat(sol,p);
}
else ok=-1;
}
else if (sol[j]=='C')
{
if (s[j]=='1')
{
if (sol[j+1]!=NULL)
*p=sol[j+1];
else
p=NULL;
strcpy(sol+j,v3[2]);
if (p!=NULL)
strcat(sol,p);
}
else if (s[j]=='2')
sol[j]='2';
else if (s[j]=='3')
{
if (sol[j+1]!=NULL)
*p=sol[j+1];
else
p=NULL;
strcpy(sol+j,v3[1]);
if (p!=NULL)
strcat(sol,p);
}
else ok=-1;
}
else if (sol[j]==s[j])
ok=1;
}
if (strcmp(sol,s)==0)
fout<<"1\n";
else
fout<<"0\n";
}
return 0;
}