Pagini recente » Cod sursa (job #2362479) | Cod sursa (job #1967089) | Cod sursa (job #1125852) | Cod sursa (job #60543) | Cod sursa (job #667347)
Cod sursa(job #667347)
#include<stdio.h>
#include<string.h>
char A[2000010],B[2000010]; int m,n,p[2000010],nr,cout[1001];
void prefix(){
int k,i; p[0]=0;
for(i=1;i<=n;i++){
k=p[i-1];
while(k>0 && A[k]!=A[i]) k=p[k-1];
if(A[k]==A[i]) k++;
p[i]=k;
}
}
void mpk(){
int k=0,i;
for(i=0;i<=m;i++){
while(k>0 && A[k]!=B[i]) k=p[k-1];
if(A[k]==B[i]) k++;
if(k==n+1) {
cout[++nr]=i-k+1; k=p[k-1];
}
}
}
int main(){
int i;
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
scanf("%s",A); scanf("%s",B);
n=strlen(A)-1; m=strlen(B)-1;
prefix(); mpk();
printf("%d\n",nr);
for(i=1;i<=nr && i<=1000;i++) printf("%d ",cout[i]);
}