Pagini recente » Cod sursa (job #2896142) | Cod sursa (job #1340617) | Cod sursa (job #1735245) | Cod sursa (job #1641693) | Cod sursa (job #3199726)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
long long p[2000005],v[2000005],hash2[2000005],sira,k,i,s,j,nr,ptr=37;
char a[2000005],b[2000005];
const long long mod=1e9+13;
int main()
{f>>a>>b;
int l1=strlen(a);
int l2=strlen(b);
p[0]=1;
for(i=1;i<=l1;i++)
sira=(sira*ptr+(int)a[i-1])%mod;
hash2[0]=0;
for(i=1;i<=l2;i++)
{hash2[i]=(hash2[i-1]*ptr+(int)b[i-1])%mod;
p[i]=(p[i-1]*ptr)%mod;
}
for(i=0;i<l2-l1+1;i++)
{j=i+l1-1;
s=((hash2[j+1]-hash2[i]*p[j-i+1])%mod+mod)%mod;
if(s==sira)v[++k]=i;
}
g<<k<<'\n';
if(k>1000)k=1000;
for(i=1;i<=k;i++)g<<v[i]<<" ";
return 0;
}