Pagini recente » Cod sursa (job #3219392) | Cod sursa (job #93361) | Cod sursa (job #1365520) | Cod sursa (job #1825649) | Cod sursa (job #1816460)
#include <cstdio>
#include <cstring>
#define NMax 10000005
#define TMax 25
const int P = 4733;
const int Q = 7477;
char s[NMax+1];
char w[TMax+1];
char Hash[P][Q];
int ans;
int main(){
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
int i,N,T,a,b,pwrP,pwrQ;
fgets(s,NMax,stdin);
N = strlen(s)-1;
for(i = 0; i < N; ++i) s[i] = s[i] - 'a';
while( fgets(w,TMax,stdin) && !feof(stdin) )
{
a = b = 0;
T = strlen(w);
if( w[T-1]=='\n' ) --T;
for(i = 0; i < T; ++i)
{
a = ( a * 2 + w[i] - 'a' ) % P;
b = ( b * 2 + w[i] - 'a' ) % Q;
}
Hash[a][b] = 1;
}
for(a = b = i = 0; i < T; ++i)
{
a = ( a * 2 + s[i] ) % P;
b = ( b * 2 + s[i] ) % Q;
}
if( Hash[a][b] ) ++ans;
for(pwrP = pwrQ = i = 1; i < T; ++i)
{
pwrP = ( pwrP * 2 ) % P;
pwrQ = ( pwrQ * 2 ) % Q;
}
for(i = T; i < N; ++i)
{
a = ( ( ( a - pwrP * s[i-T] ) % P ) * 2 + P + s[i] ) % P;
b = ( ( ( b - pwrQ * s[i-T] ) % Q ) * 2 + Q + s[i] ) % Q;
if( Hash[a][b] ) ++ans;
}
printf("%d\n",ans);
return 0;
}