Pagini recente » Cod sursa (job #368261) | Cod sursa (job #733075) | Cod sursa (job #2686654) | Cod sursa (job #2533726) | Cod sursa (job #2871574)
#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<bool, map<long long,long long> >m1;
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])%mod1;
hash2=((hash2*prim2)%mod1+d[i])%mod2;
}
m1[hash1][hash2]=1;
}
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])%mod1;
hashm2=((hashm2*prim2)%mod2+s[i])%mod2;
}
if(m1[hashm1][hashm2]!=0) poz++;
for(i=sb;i<sa;i++)
{
hashm1=((prim1*(hashm1-(((s[i-sb])*p1)%mod1)+mod1))%mod1+s[i])%mod1;
hashm2=((prim2*(hashm2-(((s[i-sb])*p2)%mod2)+mod2))%mod2+s[i])%mod2;
if(m1[hashm1][hashm2]!=0) poz++;
}
g<<poz;
return 0;
}