Pagini recente » Cod sursa (job #2630741) | Cod sursa (job #1221323) | Cod sursa (job #1701581) | Cod sursa (job #2889340) | Cod sursa (job #167060)
Cod sursa(job #167060)
#include <stdio.h>
#include <string>
#define mx 10000010
#define bz 150001
using namespace std;
struct nod
{
long long el;
nod *ua;
} *l[bz+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;
p=new nod;
p->el=x;
p->ua=l[id];
l[id]=p;
}
int comp(long long x, long ct)
{
nod *p;
long id=x%bz;
p=l[id];
ok=1;
while (p)
{
if ((p->el)==x)
{
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=str[0]-96;
for (i=1; i<h; i++)
x=x*3+str[i]-96;
comp(x,0);
if (ok)
clad(x);
}
v[1]=1;
for (i=0; i<h-1; i++)
v[1]=v[1]*3;
v[2]=v[1]*2;
v[3]=v[1]*3;
x=s[0]-96;
for (i=1; i<nm; i++)
{
if (i>=h)
x=x-v[s[i-h]-96];
x=x*3+s[i]-96;
if (i>h-2)
comp(x,1);
}
printf("%ld",nr);
fclose(stdin);
fclose(stdout);
return 0;
}