Pagini recente » Cod sursa (job #1996137) | Cod sursa (job #283525) | Cod sursa (job #2431657) | Cod sursa (job #1986798) | Cod sursa (job #1487556)
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MOD1 666013
#define MOD2 100000
using namespace std;
int lungime,lim,n;
long long b[10000004],c[50005];
char ch1[10000004],ch2[50023];
int minim(int a,int b)
{
if(a<b) return a;
return b;
}
int main()
{
freopen ("abc2.in","r",stdin);
freopen ("abc2.out","w",stdout);
scanf("%s",ch1);
scanf("%s",ch2);
lungime=strlen(ch2);
lim=strlen(ch1);
long long nr2=0,nr1=1;
for(int i=1;i<lungime;i++) nr1*=3;
// printf("%lld\n",nr1);
nr2=nr1;
long long h1=0;
for(int i=0;i<lungime;i++)
{
h1+=nr2*(ch1[i]-'a');
nr2/=3;
}
++n;
b[n]=h1;
for(int i=lungime;i<lim;i++)
{
h1-=((nr1*(ch1[i-lungime]-'a')));
h1*=3;
h1+=ch1[i]-'a';
++n;
b[n]=h1;
}
sort(b+1,b+n+1);
int ct=0,m=0;
while(1)
{
nr2=nr1;
h1=0;
for(int i=0;i<lungime;i++)
{
h1+=nr2*(ch2[i]-'a');
nr2/=3;
}
c[++m]=h1;
/*int s=1,e=n;
while(s<=e)
{
int mij=(s+e)/2;
if(b[mij]==h1)
{
ct++;
s=mij+1;
}
else if(b[mij]<h1) s=mij+1;
else e=mij-1;
}*/
if(feof(stdin)) break;
scanf("%s",ch2);
}
sort(c+1,c+m+1);
for(int i=1;i<=m;i++)
{
if(c[i]!=c[i-1])
{
int s=1,e=n;
while(s<=e)
{
int mij=(s+e)/2;
if(b[mij]==c[i])
{
ct++;
s=mij+1;
}
else if(b[mij]<c[i]) s=mij+1;
else e=mij-1;
}
}
}
printf("%d\n",ct);
}