Pagini recente » Cod sursa (job #1162911) | Cod sursa (job #3216370) | Cod sursa (job #548644) | Cod sursa (job #1374375) | Cod sursa (job #1481859)
#include <stdio.h>
#include <cstring>
#include <vector>
#define lmax 10000010
#define mod 666013
using namespace std;
int n,i,m,sol=0;
unsigned int curenthash,p3[25];
char s[lmax],ss[25];
vector <unsigned int> uhash[mod+5];
bool inhash(unsigned int x)
{
int y=x%mod;
for (unsigned int i=0;i<uhash[y].size();i++)
if (uhash[y][i]==x) return true;
return false;
}
int main() {
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
gets(s+1); n=strlen(s+1); p3[1]=1;
for (i=2;i<=20;i++) p3[i]=p3[i-1]*3;
while (gets(ss+1)>0) {
m=strlen(ss+1); curenthash=0;
for (i=1;i<=m;i++) curenthash=curenthash+p3[i]*(ss[i]-97);
if (!inhash(curenthash))
uhash[curenthash%mod].push_back(curenthash);
}
curenthash=0;
for (i=1;i<=m;i++) curenthash=curenthash+p3[i]*(s[i]-97);
sol=sol+inhash(curenthash);
for (i=m+1;i<=n;i++) {
curenthash=curenthash/3;
curenthash=curenthash+p3[m]*(s[i]-97);
sol=sol+inhash(curenthash);
}
printf("%d",sol);
return 0;
}