Pagini recente » Cod sursa (job #2732028) | Cod sursa (job #1785807) | Cod sursa (job #2610738) | Cod sursa (job #983875) | Cod sursa (job #369345)
Cod sursa(job #369345)
#include<stdio.h>
#include<string.h>
#define NM 2000001
char M[NM],N[NM];
int m,n,U[NM],sol[1009],k;
void prefix(){
int i,j=-1;
U[0]=-1;
for(i=1;i<m;++i){
while(j>-1 && M[i]!=M[j+1]) j=U[j];
if(M[i]==M[j+1]) j++;
U[i]=j;
}
}
int main(){
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
scanf("%s%s",M,N);
m=strlen(M);
n=strlen(N);
prefix();
int i,j=-1;
for(i=0;i<n;++i){
while(j>-1 && N[i]!=M[j+1]) j=U[j];
if(N[i]==M[j+1]) j++;
if(j==m-1){
k++;
if(k<=1000) sol[k]=i-m+1;
j=U[j];
}
}
printf("%d\n",k);
for(i=1;i<=k&&i<=1000;++i) printf("%d ",sol[i]);
return 0;
}