Pagini recente » Cod sursa (job #2860964) | Cod sursa (job #2671483) | Cod sursa (job #2484491) | Cod sursa (job #1616085) | Cod sursa (job #2102617)
#include <fstream>
#include <unordered_set>
#include <cstring>
using namespace std;
ifstream fin("abc2.in");
ofstream fout("abc2.out");
char sir[10000010];
char cuv[22];
int m,mod=666013,put[22];
unordered_set<int>H;
unordered_set<int>::iterator it;
int hashh(char v[])
{
int rez=0;
for(int i=0;i<m;i++)
{
rez=((1LL*rez*26)%mod+v[i]-'a'+1)%mod;
}
return rez;
}
int main()
{
fin>>sir;
fin>>cuv;
int n=strlen(sir),i,nr=0;
m=strlen(cuv);
put[0]=1;
for(i=1;i<=21;i++)
{
put[i]=(1LL*put[i-1]*26)%mod;
}
H.insert(hashh(cuv));
while(fin>>cuv)
{
H.insert(hashh(cuv));
}
int rez=hashh(sir);
it=H.find(rez);
if(it!=H.end()) nr++;
for(i=1;i<n-m+1;i++)
{
rez=(mod+rez-1LL*((sir[i-1]-'a'+1)*put[m-1])%mod)%mod;
rez=((1LL*rez*26)%mod+sir[i+m-1]-'a'+1)%mod;
it=H.find(rez);
if(it!=H.end()) nr++;
}
fout<<nr;
}