Cod sursa(job #100243)

Utilizator marius135Dumitran Adrian Marius marius135 Data 12 noiembrie 2007 00:12:52
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 0.96 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 = 1;
	while( poz && cat <= n )
	{
		poz = nod[poz][text[start+cat-1]-'a'];
		cat++;
	}
	if( cat > n ) 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;
	long rez = 0;
	for( long i = 0; i <= x; ++i)
	{
		rez+= test(i);
	}
	
	printf("%ld\n",rez);
	
	return 0 ; 
}