Pagini recente » Cod sursa (job #1284501) | Cod sursa (job #1685102) | Cod sursa (job #3194729) | Cod sursa (job #1924426) | Cod sursa (job #2911052)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("strmatch.in");
ofstream fout ("strmatch.out");
int n,m,i,l,nr,p[2000002],v[1002];
char a[2000002],b[2000002];
int main()
{
fin>>a+1;
fin>>b+1;
n=strlen (a+1);
m=strlen (b+1);
l=0;
p[1]=0;
for (i=2; i<=n; i++)
{
while (l!=0&&a[i]!=a[l+1])
l=p[l];
if (a[i]==a[l+1])
l++;
p[i]=l;
}
l=0;
for (i=1; i<=m; i++)
{
while (l!=0&&b[i]!=a[l+1])
l=p[l];
if (b[i]==a[l+1])
l++;
if (l==n)
{
nr++;
if (nr<=1000)
v[nr]=i-n;
l=p[l];
}
}
fout<<nr<<"\n";
if (nr>1000)
nr=1000;
for (i=1; i<=nr; i++)
fout<<v[i]<<" ";
return 0;
}