Pagini recente » Cod sursa (job #590639) | Cod sursa (job #766709) | Cod sursa (job #602372) | Cod sursa (job #1214668) | Cod sursa (job #1488242)
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#define MOD 666013
using namespace std;
int lungime,lim;
long long put[20];
int b[MOD][101],lun[MOD];
char ch1[10000004],ch2[50023];
int ct=0;
void find(long long a)
{
int key=a%MOD;
for(int i=1;i<=lun[key];i++)
{
while(b[key][i]==a)
{
ct++;
swap(b[key][i],b[key][lun[key]]);
lun[key]--;
if(i>lun[key]) return;
}
}
}
int main()
{
freopen ("abc2.in","r",stdin);
freopen ("abc2.out","w",stdout);
scanf("%s",ch1);
scanf("%s",ch2);
lungime=strlen(ch2);
lim=strlen(ch1);
put[0]=1;
for(int i=1;i<20;i++) put[i]=put[i-1]*3;
long long h1=0;
for(int i=0;i<lungime;i++)
{
h1+=put[lungime-1-i]*(ch1[i]-'a');
}
int key=h1%MOD;
b[key][++lun[key]]=h1;
for(int i=lungime;i<lim;i++)
{
h1-=((put[lungime-1]*(ch1[i-lungime]-'a')));
h1*=3;
h1+=(ch1[i]-'a');
key=h1%MOD;
b[key][++lun[key]]=h1;
}
while(1)
{
h1=0;
for(int i=0;i<lungime;i++)
{
h1+=put[lungime-1-i]*(ch2[i]-'a');
}
find(h1);
if(feof(stdin)) break;
scanf("%s",ch2);
}
printf("%d\n",ct);
}