Pagini recente » Cod sursa (job #3195977) | Cod sursa (job #268283) | Cod sursa (job #1015455) | Cod sursa (job #912304) | Cod sursa (job #2871629)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("abc2.in");
ofstream fout("abc2.out");
#define MOD1 10007
#define hash1 3
string A,B;
vector <unsigned int> hashtable[10007];
unsigned int sol,p1,p2,hashB1,hashA1,hashB2,hashA2,n,m;
bool search(unsigned int h)
{
unsigned int poz=h%MOD1;
for(unsigned int i=0; i<hashtable[poz].size(); ++i)if(hashtable[poz][i]==h)return 1;
return 0;
}
int main()
{
unsigned int i;
fin>>A;
while(fin>>B)
{
m=B.size();
hashB1=0;
for(i=0; i<m; ++i)
{
hashB1=((hashB1*hash1)+(B[i]-'a'));
}
if(!search(hashB1))hashtable[hashB1%MOD1].push_back(hashB1);
}
p1=p2=1;
n=A.size();
for(i=0; i<m; ++i)
{
hashA1=((hashA1*hash1)+(A[i]-'a'));
if(i>0)
{
p1=(p1*hash1);
}
}
if(search(hashA1))++sol;
for(i=m; i<n; ++i)
{
hashA1=((hash1*(hashA1-((A[i-m]-'a')*p1))))+(A[i]-'a');
if(search(hashA1))++sol;
}
fout<<sol;
fin.close();
fout.close();
return 0;
}