Pagini recente » Clasament extended_mag | Cod sursa (job #1629990) | Cod sursa (job #2474097) | Cod sursa (job #2582291) | Cod sursa (job #2223539)
#include <fstream>
#include<vector>
#include<cstring>
#define prim 30031
using namespace std;
ifstream cin("abc2.in");
ofstream cout("abc2.out");
char text[10000000], word[23];
vector<long> Hash[prim];
int n, m, match = 0;
long long pow3[24];
int main()
{
pow3[0] = 1;
for(int i = 1; i<=22; ++i) pow3[i] = pow3[i-1]*3;
cin>>text+1;
m = strlen(text+1);
cin>>(word);
n = strlen(word);
long long cod = 0;
for(int i = 0; i<n; ++i){
cod += (word[i] - 'a')*pow3[i];
}
Hash[cod%prim].push_back(cod);
while(cin>>(word))
{
cod = 0;
for(int i = 0; i<n; ++i){
cod += (word[i] - 'a')*pow3[i];
}
Hash[cod%prim].push_back(cod);
}
cod = 0;
for(int i = 1; i<=n; ++i){
cod+=(text[i] - 'a')*pow3[i-1];
}
if(!Hash[cod%prim].empty()){
for(int i = 0; i<Hash[cod%prim].size(); ++i){
if(Hash[cod%prim][i]==cod){
match++;
break;
}
}
}
for(int i = n+1; i<=m; ++i){
cod/=3;
cod+=pow3[n-1]*(text[i]-'a');
if(!Hash[cod%prim].empty()){
for(int j = 0; j<Hash[cod%prim].size(); ++j){
if(Hash[cod%prim][j]==cod){
match++;
break;
}
}
}
}
cout<<match;
return 0;
}