Cod sursa(job #2416969)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 28 aprilie 2019 17:46:03
Problema Perle Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 8.16 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);
                                }

                                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 if(s[k]!='2')
                                    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);

                                }

                                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 if(s[k]!='2')
                                    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);
                                }

                                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 if(s[k]!='2')
                                    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;
}