Cod sursa(job #53639)

Utilizator Darth_NiculusIvan Nicolae Darth_Niculus Data 22 aprilie 2007 19:31:32
Problema Perle Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.09 kb
/* Ivan Nicolae - Bucuresti */
#include <stdio.h>
#include <string.h>

#define NMAX (10007+100)
#define _fin "perle.in"
#define _fout "perle.out"

int i,n,A[NMAX],m;
/* A=4 B=5 C=6
   4 -> 1 | 2 | 3
   5 -> 25 | 14346
   6 -> 2 | 356 | 124 */

int B_unu(int n)
{
 if (A[n-1]==2 && A[n]==5)
   return 1;
 return 0;
}

int B_doi(int n)
{
 if ((A[n]==6 || A[n]==2) && (A[n-1]==1 || A[n-1]==2 || A[n-1]==3 || A[n-1]==4)
   && A[n-2]==3 && (A[n-3]==1 || A[n-3]==2 || A[n-3]==3 || A[n-3]==4) && A[n-4]==1)
   return 1;
 return 0;
}

int C_doi(int n)
{
 if ((A[n]==6 || A[n]==2) && A[n-1]==5 && A[n-2]==3)
   return 1;
 return 0;
}

int C_trei(int n)
{
 if ((A[n]==1 || A[n]==2 || A[n]==3 || A[n]==4) && A[n-1]==2 && A[n-2]==1)
   return 1;
 return 0;
}

void Deca_B_unu(int poz)
{
 int i;
 for (i=poz;i<=n;i++)
    A[i]=A[i+1];
 A[poz-1]=5; n--;
}

void Deca_B_doi(int poz)
{
 int i;
 for (i=poz-3;i<=n;i++)
    A[i]=A[i+4];
 A[poz-4]=5; n-=4;
}

void Deca_C_doi(int poz)
{
 int i;
 for (i=poz-1;i<=n;i++)
    A[i]=A[i+2];
 A[poz-2]=6; n-=2;
}

void Deca_C_trei(int poz)
{
 int i;
 for (i=poz-1;i<=n;i++)
    A[i]=A[i+2];
 A[poz-2]=6; n-=2;
}

void ReadData(void)
{
 int i,j;
 freopen("perle.in","r",stdin);
 freopen("perle.out","w",stdout);

 scanf("%d",&m);
 for (int step=1;step<=m;step++)
    {
     memset(A,0,sizeof(A));
     scanf("%d",&n);
     for (i=1;i<=n;i++)
        scanf("%d",&A[i]);

     while (n != 1)
          {
           int gasit=0;
           for (j=n;j>=1/* && !gasit */;j--)
              {
               if (B_unu(j))
                 { Deca_B_unu(j); gasit=1;}
               if (B_doi(j))
                 { Deca_B_doi(j); gasit=1;}
               if (C_doi(j))
                 { Deca_C_doi(j); gasit=1;}
               if (C_trei(j))
                 { Deca_C_trei(j); gasit=1;}
              }
           if (!gasit)
             break;
          }
     if (n==1)
       printf("1\n");
       else printf("0\n");
    }

 fclose(stdin);
 fclose(stdout);
}

int main()
{
 ReadData();
 return 0;
}