Pagini recente » Cod sursa (job #533459) | Cod sursa (job #1980512) | Cod sursa (job #580289) | Cod sursa (job #1047349) | Cod sursa (job #167093)
Cod sursa(job #167093)
#include <stdio.h>
#include <string>
#define mx 10000010
#define bz 33247
#define bzx 497
using namespace std;
struct nod
{
long el;
nod *ua;
} *l[bz+2][bzx+2];
char s[mx+2];
char str[22];
long long v[4];
long i,j,n,nm,h,nr,ok;
long long x;
void clad(long long x)
{
nod *p;
long id=x%bz,xx=x%bzx;
p=new nod;
p->el=xx;
p->ua=l[id][xx];
l[id][xx]=p;
}
int comp(long long x, long ct)
{
nod *p;
long id=x%bz,xx=x%bzx;
p=l[id][xx];
ok=1;
if (p)
{
/*if ((p->el)==xx)
{*/
ok=0;
nr+=ct;
/* break;
}
p=p->ua;*/
}
return 0;
}
int main()
{
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
fgets(s,mx+4,stdin);
nm=strlen(s)-1;
while (!feof(stdin))
{
fgets(str,22,stdin);
h=strlen(str)-1;
x=0;
for (i=0; i<h; i++)
x=x*3+str[i]-97;
comp(x,0);
if (ok)
clad(x);
}
v[1]=1;
v[2]=2;
for (i=0; i<h-1; i++)
for (j=1; j<3; j++)
v[j]=v[j]*3;
x=0;
for (i=0; i<nm; i++)
{
if (i>=h)
x=x-v[s[i-h]-97];
x=x*3+s[i]-97;
if (i>h-2)
comp(x,1);
}
printf("%ld",nr);
fclose(stdin);
fclose(stdout);
return 0;
}