Pagini recente » Cod sursa (job #2785791) | Cod sursa (job #1787641) | Cod sursa (job #1773936) | Cod sursa (job #263003) | Cod sursa (job #98729)
Cod sursa(job #98729)
/* 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*2][50];
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;
}