Pagini recente » Cod sursa (job #1838356) | Cod sursa (job #1478856) | Cod sursa (job #918708) | Cod sursa (job #2578397) | Cod sursa (job #100261)
Cod sursa(job #100261)
#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;
char *unde2 = text + start;
while( poz && (unde - unde2 < n) )
{
poz = nod[poz][ *unde ];
++unde;
}
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);
//for( long i =0 ; i < 10000000; ++i)
//text[i] = 'a';
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 ;
}