Pagini recente » Cod sursa (job #1076729) | Cod sursa (job #797954) | Cod sursa (job #607819) | Cod sursa (job #442011) | Cod sursa (job #1845938)
#include<fstream>
#include<cstring>
#include<vector>
using namespace std;
ifstream in("abc2.in");
ofstream out("abc2.out");
const int Nmax = 10000001;
char s[Nmax],cuv[21];
unsigned n,ans,val,pw=1;
vector<unsigned> W[666013];
int main(){
in.getline(s,Nmax);
while(!in.eof()){
in.getline(cuv,21);
if(in.eof()) break;
n=strlen(cuv);
val=0;
for(unsigned i=0;i<n;i++) val = val*3 + cuv[i] - 'a';
W[val%666013].push_back(val);
}
for(unsigned i=1;i<n;i++) pw=pw*3;
unsigned sz=strlen(s);
val=0;
for(unsigned i=0;i<min(n,sz);i++) val = val*3 + s[i] - 'a';
for(unsigned i=n;i<sz;i++){
for(auto it:W[val%666013]) if(it==val){ans++;break;}
val = (val-pw*(s[i-n]-'a'))*3 + s[i] - 'a';
}
for(auto it:W[val%666013]) if(it==val){ans++;break;}
out<<ans<<'\n';
return 0;
}