Cod sursa(job #1518910)

Utilizator ipus1Stefan Enescu ipus1 Data 6 noiembrie 2015 16:01:18
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<cstdio>
#include<cstring>
#define mod1 20000007
#define mod2 20000021
char v[10000001],v2[21];
bool vec[20000010],vec2[20000030];
int main ()
{freopen ("abc2.in","r",stdin);
freopen ("abc2.out","w",stdout);
int n,i,k,p,s=0,p4,x1,x2;
scanf("%s",&v);
n=strlen(v);
p=0;
while(scanf("%s",&v2)!=EOF)
	{x1=x2=0;
	if(p==0)
		k=strlen(v2);
	for(i=0;i<k;i++)
		{x1=(x1*4+v2[i]-'a'+1)%mod1;
		x2=(x2*4+v2[i]-'a'+1)%mod2;
		}
	vec[x1]=1;
	vec2[x2]=1;
	}
x1=x2=0;
for(i=0;i<k;i++)
	{x1=(x1*4+v[i]-'a'+1)%mod1;
	x2=(x2*4+v[i]-'a'+1)%mod2;
	}
if(vec[x1]==1&&vec2[x2]==1)
	s++;
p4=1;
for(i=1;i<k;i++)
	p4*=4;
for(i=k;i<n;i++)
	{x1=((x1-((v[i-k]-'a'+1)*p4)%mod1+mod1)*4+v[i]-'a'+1)%mod1;
	x2=((x2-((v[i-k]-'a'+1)*p4)%mod2+mod2)*4+v[i]-'a'+1)%mod2;
	if(vec[x1]==1&&vec2[x2]==1)
		s++;
	}
printf("%d",s);
return 0;
}