Pagini recente » Cod sursa (job #294318) | Cod sursa (job #108506) | Cod sursa (job #1009422) | Cod sursa (job #289303) | Cod sursa (job #498378)
Cod sursa(job #498378)
#include <stdio.h>
#include <string.h>
unsigned m,n,i,sol,pow,nr,M;
char string[10000010],s[25];
struct hash
{
unsigned nod;
hash *link;
}*H[1000000];
inline void add(unsigned sol)
{
hash *p;
p=new hash;
p->nod=sol;
p->link=H[sol%M];
H[sol%M]=p;
}
inline int find(unsigned sol)
{
hash *p;
p=H[sol%M];
while(p!=NULL)
{
if(p->nod==sol) return 1;
p=p->link;
}
return 0;
}
int main()
{
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
fgets(string,10000010,stdin);
n=strlen(string)-1;
if(string[n]=='\n') n--;
M=999983;
while(!feof(stdin))
{
fgets(s,25,stdin);
if(!feof(stdin))
{
m=strlen(s)-1;
if(s[m]=='\n') m--;
sol=0;
for(i=0;i<=m;i++)
sol=sol*3+s[i]-'a';
add(sol);
}
}
sol=0;
for(i=0;i<=m;i++)
sol=sol*3+string[i]-'a';
pow=1;
for(i=1;i<=m;i++) pow*=3;
nr=0;
if(find(sol)) nr++;
for(i=m+1;i<=n;i++)
{
sol=sol*3-pow*(string[i-m-1]-'a')*3+(string[i]-'a');
if(find(sol)) nr++;
}
printf("%u\n",nr);
return 0;
}