Pagini recente » Cod sursa (job #1390983) | Cod sursa (job #2257008) | Cod sursa (job #284154) | Cod sursa (job #1610532) | Cod sursa (job #2303225)
#include <bits/stdc++.h>
using namespace std;
char s[10000005],s2[25];
int len,len2;
#define MOD 9973
struct HashInt{
vector<unsigned int> H[MOD];
bool find(unsigned int n){
int h = n % MOD;
for(auto it : H[h])
if(it == n)
return 1;
return 0;
}
void insert(unsigned int n){
int h = n % MOD;
for(auto it : H[h])
if(it == n)
return ;
H[h].push_back(n);
}
};
HashInt Ap;
int main(){
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
cin>>s;
len=strlen(s);
int ans=0;
unsigned int P=1;
while(cin>>s2){
len2=strlen(s2);
unsigned int cod=0;
for(int i=0;i<len2;++i)
cod=cod*3+(s2[i]-'a');
Ap.insert(cod);
}
for(int i=1;i<len2;++i)
P*=3;
unsigned int cod=0;
for(int i=0;i<len2;++i)
cod=cod*3+(s[i]-'a');
for(int i=0;i<len-len2+1;++i){
ans+=Ap.find(cod);
cod=(cod-P*(s[i]-'a'))*3+(s[i+len2]-'a');
}
cout<<ans<<"\n";
return 0;
}