Pagini recente » Cod sursa (job #1883053) | Cod sursa (job #1785897) | Cod sursa (job #157575) | Cod sursa (job #1666392) | Cod sursa (job #2106961)
#include <fstream>
#include <cstring>
#include <stdlib.h>
using namespace std;
ifstream fin("abc2.in");
ofstream fout("abc2.out");
char s[10000005];
#define prim 666013
char cuv[22];
int main()
{ fin>>s;
fin>>cuv;
long long nr=0,i,n=strlen(s),nc=strlen(cuv),putere=1,j;
for(i=0;i<nc;i++)
{ nr+=(cuv[i]-('a'-1))*putere;
putere*=3;
}
long long loc=nr%prim;
long long **h=(long long **) malloc(prim*sizeof(long long*));
long long *ap=(long long*)calloc(prim,sizeof(long long));
ap[loc]++;
h[loc]=(long long*)realloc(h[loc],ap[loc]*sizeof(long long));
h[loc][ap[loc]-1]=nr;
while(fin>>cuv)
{ nr=0,putere=1;
for(i=0;i<nc;i++)
{ nr+=(cuv[i]-('a'-1))*putere;
putere*=3;
}
loc=nr%prim;
ap[loc]++;
h[loc]=(long long*)realloc(h[loc],ap[loc]*sizeof(long long));
h[loc][ap[loc]-1]=nr;
}
int sol=0;
nr=0,putere=1;
for(i=0;i<nc;i++)
{ nr+=(s[i]-('a'-1))*putere;
putere*=3;
}
putere/=3;
loc=nr%prim;
for(i=0;i<ap[loc];i++)
if(h[loc][i]==nr) {sol++;break;}
for(i=nc;i<n;i++)
{nr-=s[i-nc]-('a'-1);
nr/=3;
nr+=(s[i]-('a'-1))*putere;
loc=nr%prim;
for(j=0;j<ap[loc];j++)
if(h[loc][j]==nr) {sol++;break;}
}
fout<<sol;
return 0;
}