Pagini recente » Cod sursa (job #2574118) | Cod sursa (job #1316660) | Cod sursa (job #2922038) | Cod sursa (job #1405717) | Cod sursa (job #2291887)
#include <fstream>
#include <bitset>
#include <cstring>
#include <vector>
#include <cstdio>
#include <algorithm>
#include <set>
#include <unordered_set>
#define nmax 50005
#define lmax 10000005
#define kmax 22
using namespace std;
int n,m,mc,sol;
unsigned int h,t;
char s[lmax],a[kmax];
char buffer[lmax/5];
unordered_set <unsigned int> myset;
int main()
{
int i,j,x=0;
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
scanf("%s",&s);
n=strlen(s);
while (scanf("%s",&a)==1) {
m=strlen(a);
if (m) mc=m;
x=0;
for (i=0;a[i];i++)
x=x*3+a[i]-'a';
myset.insert(x);
}
m=mc;
h=1;
for (i=0;i<m;i++)
t=1LL*t*3+s[i]-'a';
for (i=1;i<m;i++)
h=1LL*h*3;
for (i=m;i<=n;i++) {
if (myset.find(t)!=myset.end())
sol++;
t=1LL*t-h*(s[i-m]-'a');
t=1LL*t*3+s[i]-'a';
}
printf("%d\n",sol);
return 0;
}