Pagini recente » Cod sursa (job #1645329) | Cod sursa (job #1890042) | Cod sursa (job #2136924) | Cod sursa (job #1269576) | Cod sursa (job #2303218)
#include <bits/stdc++.h>
using namespace std;
char s[10000005],s2[25];
int len,len2;
#define MOD 9973
struct HashInt{
vector<pair<unsigned int,int> > H[MOD];
int hashing(unsigned int n){
return n % MOD;
}
int query(unsigned int n){
int h = hashing(n);
for(auto it : H[h])
if(it.first == n){
int aux = it.second;
it = H[h].back();
H[h].pop_back();
return aux;
}
return 0;
}
void update(unsigned int n){
int h = hashing(n);
for(auto &it : H[h])
if(it.first == n){
++it.second;
return ;
}
H[h].push_back({n,1});
}
void erase(unsigned int n){
int h = hashing(n);
for(auto &it : H[h])
if(it.first == n){
it = H[h].back();
H[h].pop_back();
return ;
}
}
};
HashInt Ap;
int main(){
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
cin>>s;
len=strlen(s);
bool ok=0;
int ans=0;
unsigned int P=1;
while(cin>>s2){
if(ok==0){
len2=strlen(s2);
unsigned int cod=0;
for(int i=1;i<len2;++i)
P*=3;
for(int i=0;i<len2;++i)
cod=cod*3+(s[i]-'a');
for(int i=0;i<len-len2+1;++i){
Ap.update(cod);
cod=(cod-P*(s[i]-'a'))*3+(s[i+len2]-'a');
}
}
unsigned int cod=0;
for(int i=0;i<len2;++i)
cod=cod*3+(s2[i]-'a');
ans+=Ap.query(cod);
ok=1;
}
cout<<ans<<"\n";
return 0;
}