Pagini recente » Cod sursa (job #1140482) | Cod sursa (job #2513845) | Cod sursa (job #2669779) | Cod sursa (job #2838968) | Cod sursa (job #1060376)
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
#define MOD 99991
char a[10000010],aux[25];
vector<unsigned int> v[MOD+10];
inline bool find(const unsigned int &h)
{
int list=h%MOD;
vector<unsigned int>::iterator it;
for(it=v[list].begin();it!=v[list].end();++it)
if(*it==h)
return 1;
return 0;
}
int main()
{
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
unsigned int sol=0,h,p;
int n,l,i;
scanf("%s\n",&a);
n=strlen(a);
while(scanf("%s\n",&aux)!=EOF)
{
l=strlen(aux);
h=0;
for(i=0;i<l;++i)
h=h*3+aux[i];
if(!find(h))
v[h%MOD].push_back(h);
}
p=1;h=0;
for(i=1;i<l;++i)
p*=3;
for(i=0;i<l;++i)
h=h*3+a[i];
sol+=find(h);
for(;i<n;++i)
{
h-=p*a[i-l];
h=h*3+a[i];
sol+=find(h);
}
printf("%u\n",sol);
return 0;
}