Pagini recente » Cod sursa (job #2840089) | Cod sursa (job #2746449) | Cod sursa (job #1797527) | Cod sursa (job #3128976) | Cod sursa (job #482642)
Cod sursa(job #482642)
#include <stdio.h>
#include <algorithm>
#define Nmax 10000001
#define Nrcuv 50002
#define Lgcuv 22
#define P 3
using namespace std;
char s[Nmax];
char cuv[Lgcuv];
int v[Nrcuv];
int nr_cuv,lg_cuv;
int find(int x){
int l=1,r=nr_cuv,m;
while( l<=r ){
m=l+(r-l)/2;
if(v[m] == x ) return 1;
if( v[m] < x) l=m+1;
else r=m-1;
}
return 0;
}
int main(){
int i,p,val,rez=0;
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
scanf("%s",s+1);
while( !feof(stdin) ){
scanf("%s",cuv+1);
++nr_cuv;
for(i=1; cuv[i]; ++i)
v[nr_cuv]=v[nr_cuv]*P+cuv[i]-'a';
}
lg_cuv=i-1;
sort(v+1,v+nr_cuv+1);
p=1; val=0;
for(i=1;i<lg_cuv;++i) p=p*P;
for(i=1; s[i]; ++i){
if( i>lg_cuv )
val -= (s[i-lg_cuv]-'a')*p;
val=val*P+s[i]-'a';
if( i>=lg_cuv && find(val) ) ++rez;
}
printf("%d\n",rez);
fclose(stdin); fclose(stdout);
return 0;
}