Pagini recente » Cod sursa (job #107749) | Cod sursa (job #1730175) | Cod sursa (job #2473063) | Cod sursa (job #1726097) | Cod sursa (job #667332)
Cod sursa(job #667332)
#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];
if(nr>=1000) break;
}
}
}
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();
for(i=1;i<=nr;i++) printf("%d ",cout[i]);
}