Pagini recente » Cod sursa (job #2461221) | Cod sursa (job #1966368) | Cod sursa (job #1875811) | Cod sursa (job #1401610) | Cod sursa (job #2977172)
#include <fstream>
#include <cstring>
#define DIM 2000005
#define mod 999773
#define baza 26
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
int n,m,pmax,h1,h2,cnt,sol[DIM];
char a[DIM],b[DIM];
int _hash(char a[],int n) {
int h=0;
int p=pmax;
for (int i=1;i<=n;i++) {
h=(h+a[i]*p)%mod;
p/=baza;
}
return h;
}
int main() {
fin>>(a+1)>>(b+1);
n=strlen(a+1);
m=strlen(b+1);
if (n>m) {
fout<<0;
return 0;
}
pmax=1;
for (int i=1;i<n;i++)
pmax*=baza;
h1=_hash(a,n);
h2=_hash(b,n);
if (h1==h2)
sol[++cnt]=0;
for (int i=n+1;i<=m;i++) {
h2=((h2-b[i-n]*pmax)%mod*baza+b[i])%mod;
if (h1==h2)
sol[++cnt]=i-n;
}
for (int i=1;i<=cnt && i<=1000;i++)
fout<<sol[i]<<" ";
return 0;
}