Pagini recente » Cod sursa (job #1880768) | Cod sursa (job #2352364) | Cod sursa (job #1244578) | Cod sursa (job #2268844) | Cod sursa (job #2106957)
#include <fstream>
#include <cstring>
#include <stdlib.h>
using namespace std;
ifstream fin("abc2.in");
ofstream fout("abc2.out");
char s[10000001];
#define prim 666013
char cuv[22];
int main()
{ fin>>s;
fin>>cuv;
int 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;
}
int loc=nr%prim;
int **h=(int **) malloc(prim*sizeof(int*));
int *ap=(int*)calloc(prim,sizeof(int));
ap[loc]++;
h[loc]=(int*)realloc(h[loc],ap[loc]*sizeof(int));
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]=(int*)realloc(h[loc],ap[loc]*sizeof(int));
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;
}