Pagini recente » Cod sursa (job #1619980) | Rating Jujr Gheorghe Florinel (jurj) | Cod sursa (job #965235) | Cod sursa (job #1934493) | Cod sursa (job #169943)
Cod sursa(job #169943)
#include <stdio.h>
#include <string.h>
#define N 2000005
char a[N],b[N];
int pi[N],v[1001],n,m;
void pii(){
int k=0,i;
pi[1]=0;
for(i=2;i<=n;i++){
while(k>0 && a[k+1]!=a[i])
k=pi[k];
if(a[k+1]==a[i])
k++;
pi[i]=k;
}
}
void potrivire(){
int i,q;
q=0;
for(i=1;i<=m;i++){
while(q && a[q+1]!=b[i])
q=pi[q];
if(a[q+1]==b[i])
q++;
if(q==n)
if(v[0]<1000) v[++v[0]]=i-n;
else v[0]++;
}
}
int main(){
int i;
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
scanf("%s%s",a+1,b+1);
n=strlen(a+1);
m=strlen(b+1);
pii();
potrivire();
printf("%d\n",v[0]);
for(i=1;i<=v[0] && i<=1000;i++)
printf("%d ",v[i]);
return 0;
}