Cod sursa(job #98724)

Utilizator Darth_NiculusIvan Nicolae Darth_Niculus Data 10 noiembrie 2007 16:15:21
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.54 kb
/* Ivan Nicolae - Bucuresti */
/* ABC2 - Happy Coding 2007 */
#include <stdio.h>
#include <string.h>

#define LMAX 10000001
#define NMAX 50001
#define CMAX 21
#define _fin  "abc2.in"
#define _fout "abc2.out"

char Text[LMAX], Trt[NMAX];
int Trit[NMAX][1000];
char Cuv[CMAX];
int i,j,n,m,noduri;

void Insert(char Cuv[], int nod, int poz)
{
 if (poz < m)
   {
    int gasit=0;
    for (int fiu=1;fiu<=Trit[nod][0];fiu++)
       if (Cuv[poz] == Trt[Trit[nod][fiu]])
         { Insert(Cuv, Trit[nod][fiu], poz+1); gasit=1; }
    if (!gasit)
      {
       Trit[nod][0]++;
       Trit[nod][Trit[nod][0]]=++noduri;
       Trt[noduri]=Cuv[poz];
       Trit[noduri][0]=0;
       Insert(Cuv, noduri, poz+1);
      }
   }
}

int Query(int nod, int poz)
{
 if (poz <= i+m-1)
   {
    for (int fiu=1; fiu<=Trit[nod][0];fiu++)
       if (Text[poz] == Trt[Trit[nod][fiu]])
         return Query(Trit[nod][fiu], poz+1);
    return 0;
   }
 return 1;
}

int main()
{
 freopen(_fin,"r",stdin);
 freopen(_fout,"w",stdout);

 gets(Text); n=0;
 Trt[1]='R'; Trit[1][0]=0; noduri=1;
 
 while (!feof(stdin))
      {
       gets(Cuv); m=strlen(Cuv);
       Insert(Cuv,1,0);
      }

/* for (i=1;i<=noduri;i++)
    {
     printf("%c ",Trt[i]);
     for (j=1;j<=Trit[i][0];j++)
        printf("%d ",Trit[i][j]);
     printf("\n");
    }                               */
      
 int rez=0;
 for (i=0;i<=strlen(Text)-m;i++)
    if (Query(1,i))
      rez++;

 printf("%d\n",rez);

 fclose(stdin);
 fclose(stdout);
 return 0;
}