Cod sursa(job #53618)

Utilizator chermanCorina Herman cherman Data 22 aprilie 2007 18:11:04
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.02 kb
#include <stdio.h>
#include <string.h>

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

int n;
int a[11][10001];
int t=0,poz=0;

void verifica(int i,char * s)
{
    printf ("%d %s\n",poz,s);
    //int mm=strlen(s);
    int k=0;
    if (s[0]=='b')
    {
        //if (poz<a[i][0]-mm+1)
        //{
         switch (a[i][poz])
         {
           case 2:
              poz++;
              verifica(i,"b");
              break;
           case 1:
              //if (poz+4<=a[i][0]-mm+1 && a[i][poz+2]==3)
              if (poz+4<=a[i][0] && a[i][poz+2]==3)
              {
                  poz+=4;
                  verifica(i,"c");
              }
              break;
         }
        //}
    }
    else
    if (s[0]=='c')
    {
        //if (poz<a[i][0]-mm+1 && a[i][poz]==3)
        if (poz+2<a[i][0] && a[i][poz]==3)
        {
              poz++;
              verifica(i,"bc");
        }
        else
        {
            switch(a[i][poz])
            {
                case 1:
                  if (poz+2<=a[i][0] && a[i][poz+1]==2)
                  {
                      printf("aici\n");
                    poz+=2;
                    t=1;
                  }
                  break;
                case 2:
                  printf ("aa\n");
                  //poz++;
                  t=1;
                  break;
            }
        }

    }

//    if (strlen(s)>1 && t==1 && poz<a[i][0])
/*
    if (strlen(s)>1 && poz>a[i][0])
    {
     printf("a2\n");
        t=0;
    }
    else
    */
    if (t)
    {
    if (strlen(s)>1 && poz>a[i][0])
    {
     t=0;
    }
    else
    if (strlen(s)>1 && poz<a[i][0])
    {
     t=0;
     poz++;
     verifica(i,s+1);
    }
    }
}

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");

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