Pagini recente » Cod sursa (job #2020215) | Cod sursa (job #2406901) | Cod sursa (job #263358) | Cod sursa (job #921435) | Cod sursa (job #247253)
Cod sursa(job #247253)
#include <stdio.h>
#include <string>
#include <vector>
#define mod 33123
#define pb push_back
using namespace std;
// nr max 3 486 784 401
int n,m,i,sol,p3[21]; char text[10000005],ch[32];
unsigned int nr;
vector <unsigned int>v[mod];
void add(unsigned int x){
unsigned k=x%mod,i,l=v[k].size(),ok=0;
for (i=0;i<l;++i)if (v[k][i]==x){ok=1;break;}
if (!ok)v[k].pb(x);
}
void search(unsigned int x){
unsigned k=x%mod,i,l=v[k].size();
for (i=0;i<l;++i)if (v[k][i]==x){sol++;break;}
}
int main(){
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
scanf("%s\n",text);n=strlen(text);
scanf("%s\n",ch);m=strlen(ch);
//preprocesare
while (ch[0]){
for (i=0,nr=0;i<m;++i) nr=nr*3+ch[i]-'a';
add(nr);
ch[0]=0; scanf("%s\n",ch);
}//////
for (p3[0]=1,i=1;i<=20;++i)p3[i]=p3[i-1]*3;
for (i=0;i<m;++i)
nr=nr*3+text[i]-'a';
search(nr);
for (i=m;i<n;++i){
nr-=p3[m-1]*(text[i-m]-'a');
nr=nr*3+text[i]-'a';
search(nr);
}
printf("%ld\n",sol);
return 0;
}