Pagini recente » Cod sursa (job #1906253) | Cod sursa (job #2345071) | Cod sursa (job #1308859) | Cod sursa (job #390136) | Cod sursa (job #2790490)
#include <bits/stdc++.h>
#define m1 393241
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
long long n,m,v1,v2,k1=1,k2=1,x1,x2,i;
long long va(char c)
{
if(isupper(c))return c-'A'+1;
else if(islower(c))return c-'a'+27;
return c-'0'+53;
}
char a[2000005],b[2000005];
int r[2000005],nr;
int main()
{
fin>>a>>b;
for(i=0;a[i];i++)
{
x1=((x1*63)%m1+va(a[i]))%m1;
if(i>0)k1=(k1*63)%m1;
}
n=i;
i=0;
for(i=0;b[i];i++)
{
if(i<n)
{
v1=((v1*63)%m1+va(b[i]))%m1;
if(i==n-1&&x1==v1)nr++;
}
else {
v1=(v1-(va(b[i-n])*k1)%m1)%m1;
if(v1<0)v1+=m1;
v1=((v1*63)%m1+va(b[i]))%m1;
if(x1==v1&&nr<1000)r[++nr]=i-n+1;
}
}
fout<<nr<<'\n';
for(i=1;i<=nr;i++)fout<<r[i]<<' ';
return 0;
}