Pagini recente » Cod sursa (job #633621) | Cod sursa (job #3005174) | Cod sursa (job #1889008) | Cod sursa (job #2455013) | Cod sursa (job #1093114)
#include<cstdio>
#include<cstring>
#include<vector>
#define ui unsigned int
using namespace std;
const int NMAX = 10000005;
const int DMAX = 25;
const int MOD = 100009;
int N,M,i,r; ui cod,B,sol;
char S[NMAX],A[DMAX];
vector<ui> V[MOD];
vector<ui>::iterator it;
void Add(ui x)
{
r=x%MOD;
V[r].push_back(x);
}
void Find(ui x)
{
r=x%MOD;
for(it=V[r].begin();it!=V[r].end();it++)
if(*it==x) {sol++; return;}
}
int main()
{
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
fgets(S+1,NMAX,stdin);
M=strlen(S+1)-1;
while(fgets(A+1,DMAX,stdin))
{
N=strlen(A+1)-1;
for(cod=0,i=1;i<=N;i++)
cod=cod*3+A[i]-'a';
Add(cod);
}
for(B=1,cod=0,i=1;i<=N;i++)
{
cod=cod*3+S[i]-'a';
if(i>1) B*=3;
}
Find(cod);
for(;i<=M;i++)
{
cod=cod-B*(S[i-N]-'a');
cod=cod*3+S[i]-'a';
Find(cod);
}
printf("%u\n",sol);
return 0;
}