Cod sursa(job #2416929)
Utilizator | Data | 28 aprilie 2019 16:51:21 | |
---|---|---|---|
Problema | Perle | Scor | 10 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 8.25 kb |
//#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream in("perle.in");
ofstream out("perle.out");
const int Max=10005;
char s[Max];
char aux[Max+5];
int n;
void sol()
{
in>>n;
for(int i=1;i<=n;i++)
{
int x; in>>x; aux[0]=0;
for(int j=0;j<x;j++)
{
char p; in>>p;
s[j]=p;
}
s[x]=0;
if(x==1)
out<<1<<"\n";
else
{
bool ok=1;
if(s[0]=='1')
{
if(x==3 &&s[1]=='2')
out<<1<<"\n";
else if(x==3 && s[1]!='2')
out<<0<<"\n";
else if(x>=5 && s[2]=='3')
{
if(x==5 && s[4]=='2')
out<<1<<"\n";
else if(x==5 && s[4]!='2')
out<<0<<"\n";
else
{
strcpy(aux,"1A3AC");
for(int k=0;k<strlen(aux) && k<x && ok;k++)
{
if(aux[k]=='C')
{
if(strlen(aux)==x && s[x-1]=='2')
break;
else if(s[k]=='1' && s[k+1]=='2' && strlen(aux)+2==x)
{
char q[Max]; strcpy(q,aux+k+1);
aux[k]=0;
strcat(aux,"12A");
strcat(aux,q);
break;
}
else if(s[k]=='3' && strlen(aux)+2<=x)
{
char q[Max]; strcpy(q,aux+k+1);
aux[k]=0;
strcat(aux,"3BC");
strcat(aux,q);
}
else
ok=0;
}
else if(aux[k]=='B')
{
if(s[k]=='2' && strlen(aux)+1<=x)
{
char q[Max]; strcpy(q,aux+k+1);
aux[k]=0;
strcat(aux,"2B");
strcat(aux,q);
}
else if(strlen(aux)+4<=x && s[k]=='1' && s[k+2]=='3')
{
char q[Max]; strcpy(q,aux+k+1);
aux[k]=0;
strcat(aux,"1A3AC");
strcat(aux,q);
}
else
ok==0;
}
}
if(strlen(aux)!=x || (strlen(aux)==x && aux[x-1]=='C' && s[x-1]!='2') ||(strlen(aux)==x && aux[x-1]=='B'))
ok=0;
if(ok==1)
out<<1<<"\n";
else
out<<0<<"\n";
}
}
else
out<<0<<"\n";
}
else if(s[0]=='2')
{
strcpy(aux,"2B");
for(int k=0;k<strlen(aux) && k<x && ok;k++)
{
if(aux[k]=='C')
{
if(strlen(aux)==x && s[x-1]=='2')
break;
else if(s[k]=='1' && s[k+1]=='2' && strlen(aux)+2==x)
{
char q[Max]; strcpy(q,aux+k+1);
aux[k]=0;
strcat(aux,"12A");
strcat(aux,q);
break;
}
else if(s[k]=='3' && strlen(aux)+2<=x)
{
char q[Max]; strcpy(q,aux+k+1);
aux[k]=0;
strcat(aux,"3BC");
strcat(aux,q);
}
else
ok=0;
}
else if(aux[k]=='B')
{
if(s[k]=='2' && strlen(aux)+1<=x)
{
char q[Max]; strcpy(q,aux+k+1);
aux[k]=0;
strcat(aux,"2B");
strcat(aux,q);
}
else if(strlen(aux)+4<=x && s[k]=='1' && s[k+2]=='3')
{
char q[Max]; strcpy(q,aux+k+1);
aux[k]=0;
strcat(aux,"1A3AC");
strcat(aux,q);
}
else
ok==0;
}
}
if(strlen(aux)!=x || (strlen(aux)==x && aux[x-1]=='C' && s[x-1]!='2') ||(strlen(aux)==x && aux[x-1]=='B'))
ok=0;
if(ok==1)
out<<1<<"\n";
else
out<<0<<"\n";
}
else
{
strcpy(aux,"3BC");
for(int k=0;k<strlen(aux) && k<x && ok;k++)
{
if(aux[k]=='C')
{
if(strlen(aux)==x && s[x-1]=='2')
break;
else if(s[k]=='1' && s[k+1]=='2' && strlen(aux)+2==x)
{
char q[Max]; strcpy(q,aux+k+1);
aux[k]=0;
strcat(aux,"12A");
strcat(aux,q);
break;
}
else if(s[k]=='3' && strlen(aux)+2<=x)
{
char q[Max]; strcpy(q,aux+k+1);
aux[k]=0;
strcat(aux,"3BC");
strcat(aux,q);
}
else
ok=0;
}
else if(aux[k]=='B')
{
if(s[k]=='2' && strlen(aux)+1<=x)
{
char q[Max]; strcpy(q,aux+k+1);
aux[k]=0;
strcat(aux,"2B");
strcat(aux,q);
}
else if(strlen(aux)+4<=x && s[k]=='1' && s[k+2]=='3')
{
char q[Max]; strcpy(q,aux+k+1);
aux[k]=0;
strcat(aux,"1A3AC");
strcat(aux,q);
}
else
ok==0;
}
}
if(strlen(aux)!=x || (strlen(aux)==x && aux[x-1]=='C' && s[x-1]!='2') ||(strlen(aux)==x && aux[x-1]=='B'))
ok=0;
if(ok==1)
out<<1<<"\n";
else
out<<0<<"\n";
}
}
}
}
int main()
{
sol();
return 0;
}