Pagini recente » Cod sursa (job #2454010) | Cod sursa (job #1427659) | Cod sursa (job #293830) | Cod sursa (job #664343) | Cod sursa (job #1216115)
#include<fstream>
#include<vector>
#include<cstring>
#define MAXN 666013
#define pb push_back
using namespace std;
int P=3,Q=MAXN,exp[21];
vector<int> H[MAXN];
char s[10000000],s1[21];
void putere() {
int i;
exp[0]=1;
for(i=1;i<=20;i++)
exp[i]=P*exp[i-1];
}
vector<int>::iterator find_value(int X){
vector<int>::iterator it;
int V=X%MAXN;
it=H[V].begin();
while(it!=H[V].end() && *it!=X )
it++;
return it;
}
void add_value(int X) {
if(find_value(X)==H[X%MAXN].end())
H[X%MAXN].pb(X);
}
int main() {
ifstream cin("abc2.in");
ofstream cout("abc2.out");
putere();
int i,j,N,M,f=0,V,k=0;
cin>>s1;
M=strlen(s1);
while(!cin.eof()) {
cin>>s;
N=strlen(s);
f=0;
for(i=0;i<N;i++)
f+=s[i]*exp[i];
V=f%MAXN;
add_value(f);
}
if(N<=M) {
f=0;
for(i=0;i<N;i++)
f+=s1[i]*exp[i];
V=f%MAXN;
if(find_value(f)!=H[V].end()) k++;
while(i<M) {
f=f-s1[i-N];
f=f/P;
f+=s1[i]*exp[N-1];
V=f%MAXN;
if(find_value(f)!=H[V].end()) k++;
i++;
} }
cout<<k;
return 0;
}