Pagini recente » Cod sursa (job #926682) | Cod sursa (job #1315788) | Cod sursa (job #2481259) | Cod sursa (job #589352) | Cod sursa (job #2871572)
#include <bits/stdc++.h>
#define mod1 1000000007
#define mod2 1000000013
#define prim1 31
#define prim2 37
using namespace std;
ifstream f("abc2.in");
ofstream g("abc2.out");
unsigned long long hashm1,hashm2,p1=1,p2=1,hash1,hash2,poz;
int sa,sb,i;
string s,d;
map<long long,int>m1,m2;
int main()
{
f>>s;
sa=s.size();
while(f>>d)
{
sb=d.size();
hash1=hash2=0;
for(i=0; i<sb; i++)
{
hash1=((hash1*prim1)%mod1+d[i]-'a')%mod1;
hash2=((hash2*prim2)%mod1+d[i]-'a')%mod2;
}
m1[hash1]++;
m2[hash2]++;
}
for(i=1; i<sb; i++)
{
p1=(p1*prim1)%mod1;
p2=(p2*prim2)%mod2;
}
for(i=0;i<sb;i++)
{
hashm1=((hashm1*prim1)%mod1+s[i]-'a')%mod1;
hashm2=((hashm2*prim2)%mod2+s[i]-'a')%mod2;
}
if(m1[hashm1]!=0&&m2[hashm2]!=0) poz++;
for(i=sb;i<sa;i++)
{
hashm1=((prim1*(hashm1-(((s[i-sb]-'a')*p1)%mod1)+mod1))%mod1+s[i]-'a')%mod1;
hashm2=((prim2*(hashm2-(((s[i-sb]-'a')*p2)%mod2)+mod2))%mod2+s[i]-'a')%mod2;
if(m1[hashm1]!=0&&m2[hashm2]!=0) poz++;
}
g<<poz;
return 0;
}