Cod sursa(job #51673)

Utilizator chermanCorina Herman cherman Data 16 aprilie 2007 12:08:23
Problema Perle Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.1 kb
#include <stdio.h>
#include <string.h>

FILE *in = fopen("perle.in", "r"), *out = fopen("perle.out", "w");

unsigned n;
unsigned a[11][10001];
unsigned t=0;
unsigned poz=2;

void verifica(int i,char * s)
{
    //printf("verifica %d %s\n",poz,s);
    if(strlen(s)+poz==a[i][0] && strchr(s,'b')==NULL && strchr(s,'c')==NULL) t=1;
    else
     if (strlen(s)<a[i][0])
     {
      int k1=500,k2=500;
      if (strchr(s,'b')!=NULL)
           k1=strchr(s,'b')-s+1;
      if (strchr(s,'c')!=NULL)
           k2=strchr(s,'c')-s+1;
      //printf("%d**%d\n",k1,k2);
      int k=(k1<k2)?k1:k2;
      //printf("**%d**\n",k);
      if (k!=500)
      {
          k=k+poz;
          if(k==k1+poz)
          {
           //printf("aici**%d %d %d\n",i,k,a[i][k]);
           if (a[i][k]==2)
           {
               char s1[]="b";
               strcat(s1,strchr(s,'b')+1);
               //printf("%s--\n",s1);
               poz=k;
               verifica(i,s1);
           }
           else
           if (a[i][k]==1)
           {
               char s1[]="a3ac";
               strcat(s1,strchr(s,'b')+1);
               //printf("mm %d %d %s--\n",k,poz,s1);
               poz=k-1;
               verifica(i,s1);
           }
          }
          if(k==k2+poz)
          {
      //printf("aaaaa%d \n",k);
           if (a[i][k]==2)
           {
               char s1[]="";
               strcat(s1,strchr(s,'c')+1);
               //printf("%s---\n",s1);
               poz=k;
               verifica(i,s1);
           }
           if (a[i][k]==3)
           {
               char s1[]="bc";
               strcat(s1,strchr(s,'c')+1);
               //printf("%s---\n",s1);
               poz=k;
               verifica(i,s1);
           }
           if (a[i][k]==1)
           {
               char s1[]="2a";
               strcat(s1,strchr(s,'c')+1);
               //printf("%s----\n",s1);
               poz=k;
               verifica(i,s1);
           }
          }
      }
    }
}

int main()
{
    fscanf(in, "%d", &n);

    for ( int i = 0; i < n; ++i )
        {
        fscanf(in, "%d", &a[i][0]);
        for ( int j = 1; j <=a[i][0]; ++j )
            fscanf(in, "%d", &a[i][j]);
        }

 /*
 printf("\n**************\n");
    for ( int i = 0; i < n; ++i )
    {
     for ( int j = 1; j <=a[i][0]; ++j )
      printf("%d ",a[i][j]);
    printf("\n");
    }
 printf("\n**************\n");
*/

    for ( int i = 0; i < n; ++i )
       if(a[i][0]==1)
       {
         fprintf(out, "%d\n",1);
         //printf("\nrezultat %d\n",1);
       }
       else
       {
         t=0;
         switch (a[i][1])
         {
           case 2:
              verifica(i,"b");
              break;
           case 1:
              if (a[i][0]==3) verifica(i,"2a");
              else verifica(i,"a3ac");
              break;
           case 3:
              verifica(i,"bc");
              break;
         }
         fprintf(out, "%d\n",t);
         //printf("\nrezultat %d\n",t);
         //printf("*************\n");
       }

	return 0;
}