Pagini recente » Cod sursa (job #692093) | Cod sursa (job #2111786) | Cod sursa (job #2971220) | Cod sursa (job #3218391) | Cod sursa (job #2192378)
#include <fstream>
#include<bits/stdc++.h>
using namespace std;
const int baza=26;
const int prim=666013;
vector<string> hashTable[prim];
string text,cuvant;
int n,i,j;
int main()
{
ifstream f("abc2.in");
ofstream g("abc2.out");
f>>text;
int l=text.length();
while(f>>cuvant)
{
int cod=0;
n=cuvant.length();
for(i=0;i<n;++i)
cod=(cod*baza+cuvant[i]-'a')%prim;
hashTable[cod].push_back(cuvant);
}
int cod=0,potriviri=0,h=1;
for(i=1;i<n;++i) h=(h*baza)%prim;
for(i=0;i<n;++i)
cod=(cod*baza+text[i]-'a')%prim;
for(;i<l;++i)
{
for(unsigned int j=0;j<hashTable[cod].size();++j)
{
bool ok=1;
for(int k=0;k<n && ok;++k)
if(hashTable[cod][j][k]!=text[i+k-n]) ok=0;
if(ok) {potriviri++;break;}
}
cod=(cod+baza*prim-(text[i-n]-'a')*h)%prim;
cod=(cod*baza+text[i]-'a')%prim;
}
for(unsigned int j=0;j<hashTable[cod].size();++j)
{
bool ok=1;
for(int k=0;k<n && ok;++k)
if(hashTable[cod][j][k]!=text[i+k-n]) ok=0;
if(ok) {potriviri++;break;}
}
g<<potriviri<<endl;
return 0;
}