Pagini recente » Cod sursa (job #697770) | Cod sursa (job #1328334) | Cod sursa (job #1558261) | Cod sursa (job #2667303) | Cod sursa (job #155388)
Cod sursa(job #155388)
# include <stdio.h>
# include <string.h>
char s[10000000], sub[21], chr[21][50000];
int p[22], n, m, nr = 0, num = -1;
int verif ()
{
for ( int i = 0; i <= num; ++i )
if ( strcmp(chr[i], sub) == 0 )
return 0;
strcpy ( chr[i], sub ); ++ num;
return 1;
}
void prefix ()
{
int j = -1;
p[0] = -1;
for (int i = 0; i < m; )
{
while ( j >= 0 && sub[i] != sub[j] )
j = p[j];
++j; ++i;
if ( sub[j]==sub[i] )
p[i] = p[j];
else
p[i] = j;
}
}
void kmp ()
{
int j = 0;
for ( int i = 0; i < n; )
{
while ( j > -1 && s[i] != sub[j] )
j = p[j];
++i; ++j;
if ( j >= m )
{
nr++;
j = p[j];
}
}
}
void exe ()
{
freopen ( "abc2.in", "r", stdin );
freopen ( "abc2.out", "w", stdout );
fgets ( s, 10000000, stdin );
if ( s[strlen (s)-1] == '\n' )
s[strlen(s)-1] = 0;
n = strlen ( s );
while ( !feof(stdin ) )
{
fgets ( sub, 22, stdin );
if ( sub[strlen (sub)-1] == '\n' )
sub[strlen(sub)-1] = 0;
if (verif ())
{
m = strlen ( sub );
prefix ();
kmp();
}
}
printf ( "%d", nr );
fclose ( stdout );
fclose ( stdin );
}
int main ()
{
exe();
return 0 ;
}