Pagini recente » Cod sursa (job #2913370) | Cod sursa (job #731858) | Cod sursa (job #3151025) | Cod sursa (job #391539) | Cod sursa (job #1076223)
#include<fstream>
#include<cstring>
#include<iostream>
#define mod1 100007
#define mod2 100021
#define mod3 134531
using namespace std;
char a[2000002],b[2000002];
long n,m,i,v[1001],nr;
long ha1,ha2,hb1,hb2,ha3,hb3;
long h1=1,h2=1,h3=1;
int main()
{
ifstream f("strmatch.in");
ofstream g("strmatch.out");
f>>a;
f>>b;
m=strlen(a);
n=strlen(b);
for(i=0;i<m;i++)
{
ha1=(ha1*73+a[i])%mod1;
hb1=(hb1*73+b[i])%mod1;
ha2=(ha2*73+a[i])%mod2;
hb2=(hb2*73+b[i])%mod2;
ha3=(ha3*73+a[i])%mod3;
hb3=(hb3*73+b[i])%mod3;
if(i)
{h1=(h1*73)%mod1;
h2=(h2*73)%mod2;
h3=(h3*73)%mod3;}
}
for(i=0;i<=n-m;i++)
{
if(ha1==hb1&&ha2==hb2&&ha3==hb3)
{
nr++;
if(nr<=1000) v[nr]=i;
}
hb1=(73*(hb1-(b[i]*h1)%mod1+mod1)+b[i+m])%mod1;
hb2=(73*(hb2-(b[i]*h2)%mod2+mod2)+b[i+m])%mod2;
hb3=(73*(hb3-(b[i]*h3)%mod3+mod3)+b[i+m])%mod3;
}
g<<nr<<'\n';
for(i=1;i<=nr && i<=1000;i++)
g<<v[i]<<'\n';
}