Pagini recente » Cod sursa (job #54264) | Cod sursa (job #659337) | Cod sursa (job #2631202) | Cod sursa (job #2579399) | Cod sursa (job #148481)
Cod sursa(job #148481)
#include <stdio.h>
#include <string.h>
#define nMax 2000005
#define minim(a, b) ((a < b) ? a : b)
long n,m,sol=0,v[1024];
long urm[nMax];
char A[nMax],B[nMax];
void urmatorul(){
int k=0,i;
urm[1]=0;
for (i=2;i<=m;i++){
while (k>0&&B[k+1]!=B[i])k=urm[k];
if (B[k+1]==B[i])k++;
urm[i]=k;
}
}
int main(){
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
int i,x=0;
scanf("%s",B+1);
scanf("%s",A+1);
n=strlen(A+1);
m=strlen(B+1);
urmatorul();
for (i=1;i<=n;i++){
while (x>0&&B[x+1]!=A[i])x=urm[x];
if (B[x+1]==A[i])x++;
if (x==m){//solutie
x=urm[x];
sol++;
if (sol<=1000)
v[sol]=i-m;
}
}
printf("%ld\n",sol);
for (i=1;i<=minim(sol,1000);i++)
printf("%ld ",v[i]);
printf("\n");
return 0;
}