Pagini recente » Cod sursa (job #2713682) | Cod sursa (job #2871382) | Cod sursa (job #1218304) | Cod sursa (job #2889649) | Cod sursa (job #2208202)
#include <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
int pi[2000001],v[2000001];
char a[2000000],b[2000000];
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++;
if(k==n)
{
nr++;
if(nr<=1000)
v[nr]=i-n;
k=pi[n];
}
}
cout<<nr<<'\n';
for(i=1;i<=nr;i++)
cout<<v[i]<< " ";
return 0;
}