Pagini recente » Cod sursa (job #1323307) | Cod sursa (job #252256) | Cod sursa (job #2632233) | Cod sursa (job #3187974) | Cod sursa (job #668928)
Cod sursa(job #668928)
#include <stdio.h>
#include <string.h>
#define lmax 2000005
char A[lmax],B[lmax];
int n,m,urm[lmax],sol,poz[1005];
int main()
{ int i,k;
freopen("strmatch.in","r",stdin);
gets(A+1); gets(B+1);
A[0]=' '; B[0]=' ';
m=strlen(A)-1; n=strlen(B)-1;
fclose(stdin);
k=0; urm[1]=0;
for(i=2;i<=m;++i)
{
while(k>0&&A[k+1]!=A[i])
k=urm[k];
if(A[k+1]==A[i])++k;
urm[i]=k;
}
k=0; sol=0;
for(i=1;i<=n;++i)
{
while(k>0&&A[k+1]!=B[i])
k=urm[k];
if(A[k+1]==B[i])++k;
if(k==m){
sol++; poz[sol]=i-m; k=urm[k];
}
}
if(sol>1000)sol=1000;
freopen("strmatch.out","w",stdout);
printf("%d\n",sol);
for(i=1;i<=sol;++i)
printf("%d ",poz[i]);
fclose(stdout);
return 0;
}