Cod sursa(job #53550)

Utilizator chermanCorina Herman cherman Data 22 aprilie 2007 14:56:05
Problema Perle Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.08 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)
              {
                  poz+=4;
                  verifica(i,"c");
              }
              break;
         }
        }
    }
    else
    if (s[0]=='c')
    {
     printf("poz=%d elem=%d\n",a[i][0]-mm+1,poz+2);
        if (poz==a[i][0]-mm+1 && a[i][poz]==2)
        {
            poz++;
            t=1;
        }
        else
         if (poz+2<=a[i][0]-mm+1)
         {
         switch (a[i][poz])
         {
           case 1:
              if (poz+2==a[i][0])
              {
                  printf("vccc\n");
              if (a[i][0]-mm+1==poz+2 && a[i][poz+1]==2)
              {
                  poz+=2;
                   t=1;
              }
              }
              else
              if (poz+2<a[i][0])
              {
                  printf("aici\n");
              if (a[i][0]-mm==poz+2 && a[i][poz+1]==2)
              {
                  poz+=2;
                   t=1;
              }
              }

              //printf("aa %d %d\n",a[i][0]-mm,poz+2);
              break;
           case 3:
              poz++;
              verifica(i,"bc");
              break;
         }
         }
    }
    if (strlen(s)>1 && t==1 && poz<a[i][0])
    {
     t=0;
     poz++;
     printf("a1\n");
     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]>3 && 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;
}