Pagini recente » Cod sursa (job #1040497) | Cod sursa (job #2130626) | Cod sursa (job #1609572) | Cod sursa (job #811485) | Cod sursa (job #1477179)
#include <cstdio>
#include <cstring>
#define MOD 666013
#define NMAX 50007
#define DIM 27
#define LIM 10000007
FILE *fin, *fout;
using namespace std;
int h, hh, sze1, sze2, ct, put[DIM];
char s[LIM], cuv[DIM], loc[MOD];
void init()
{
put[0] = 1;
for(int i = 1; i< DIM; ++i)
{
put[i] = put[i-1]*3;
while(put[i] >= MOD) put[i] -= MOD;
}
}
void citire()
{
scanf("%s", s+1);
sze1= strlen(s+1);
while(!feof(fin))
{
scanf("%s", cuv+1);
if(!sze2) sze2 = strlen(cuv+1);
h = 0;
for(int i = 1; i<= sze2; ++i)
{
h = (h + (cuv[i] - 'a')*put[sze2-i])%MOD;
}
loc[h] = 1;
}
}
void solve()
{
hh = 0;
for(int i = 1; i<= sze2-1; ++i)
{
hh = (hh + (s[i] - 'a')*put[sze2-i])%MOD;
}
for(int i = sze2; i<= sze1; ++i)
{
hh = (hh + (s[i] - 'a'))%MOD;
if(loc[hh]) ct++;
hh = ((hh - (s[i-sze2+1]-'a')*put[sze2-1] + MOD)*3)%MOD;
}
}
int main()
{
fin = freopen("abc2.in", "r", stdin);
fout = freopen("abc2.out", "w", stdout);
init();
citire();
solve();
printf("%d\n", ct);
fclose(fin);
fclose(fout);
return 0;
}