Pagini recente » Cod sursa (job #2431483) | Cod sursa (job #1753579) | Cod sursa (job #205754) | Cod sursa (job #2647896) | Cod sursa (job #723353)
Cod sursa(job #723353)
#include <stdio.h>
#include <string.h>
char a[2000013],b[2000013];
int na,nb,i,j,k,p[2000002],sol[1001];
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
gets(a);
gets(b);
na=strlen(a);
nb=strlen(b);
k=-1;
p[0]=-1;
for(i=1;i<na;i++)
{
while(k>-1&&a[i]!=a[k+1])k=p[k];
if(a[i]==a[k+1])++k;
p[i]=k;
}
k=-1;
j=0;
for(i=0;i<nb;i++)
{
while(k>-1&&b[i]!=a[k+1])k=p[k];
if(b[i]==a[k+1])k++;
if(k==na-1)
{
if(j<1000)sol[j]=i-na+1;
++j;
k=p[k];
}
}
printf("%d\n",j);
for(i=0;i<j;++i)printf("%d ",sol[i]);
return 0;
}