Cod sursa(job #100254)

Utilizator marius135Dumitran Adrian Marius marius135 Data 12 noiembrie 2007 00:24:33
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.05 kb
#include<stdio.h>
#include<string.h>
#define maxl 1024*1024*10
#define maxn 1024*1024


char text[maxl];
long nod[maxn][3], n ,last = 1;

long test(long start)
{
	long poz = 1,cat = 0;
	char *unde = text+start;
	while( poz && cat < n )
	{
		poz = nod[poz][ *unde ];
		++unde;
		++cat;
		
	}
	if( poz ) return 1;
	return 0;
}

void baga(char *sir,long poz,long h)
{
	if( h > n) return;
	if( nod[poz][ sir[0]-'a' ] != 0 )
	{
		baga( sir + 1, nod[poz][sir[0] -'a'], h+1 );
		return ;
	}
	for ( long i = h; i <= n; ++i)
	{
		nod[poz][ sir[i-h]-'a' ] = ++last;
		poz = last;
	}
}

int main()
{
	freopen("abc2.in","r",stdin);
	freopen("abc2.out","w",stdout);
	
	char sir[32];
	scanf("%s",text);
	long ok = 0;
	while( scanf("%s",sir) == 1)
	{
		if( !ok)
			n = strlen(sir);
		
		baga(sir,1,1);
		ok = 1;
	}
	
	
	long x = strlen(text) - n;
	for( long i = 0; i < n +x ; ++i)
		text[i]-='a';
	long rez = 0;
	//return 0;
	for( long i = 0; i <= x; ++i)
	{
		rez+= test(i);
	}
	
	printf("%ld\n",rez);
	
	return 0 ; 
}