Pagini recente » Cod sursa (job #131315) | Cod sursa (job #2936564) | Cod sursa (job #1677910) | Cod sursa (job #2646993) | Cod sursa (job #2208204)
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
int pi[2000001],ans[2000001],v[2000001];
char a[2000001],b[2000001];
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
char c;
int nr=0,n=1,m=1,k,i;
c=getchar();
a[n]=c;
n++;
while(c!=10)
{
c=getchar();
a[n]=c;
n++;
}
n-=2;
c=getchar();
b[m]=c;
m++;
while(c!=10)
{
c=getchar();
b[m]=c;
m++;
}
m-=2;
pi[1]=0;
k=0;
for(i=2;i<=n;i++)
{
while(k!=0 && a[k+1]!=a[i])
k=pi[k];
if(a[k+1]==a[i])
k++;
pi[i]=k;
}
k=0;
for(i=1;i<=m;i++)
{
while(k!=0 && a[k+1]!=b[i])
k=pi[k];
if(a[k+1]==b[i])
k++;
ans[i]=k;
if(k==n)
{
nr++;
if(nr<=1000)
v[nr]=i-n;
k=pi[n];
}
}
cout<<nr<<'\n';
if(nr<=1000)
for(i=1;i<=nr;i++)
cout<<v[i]<< " ";
else
for(i=1;i<=1000;i++)
cout<<v[i]<< " ";
return 0;
}