Pagini recente » Cod sursa (job #2474343) | Cod sursa (job #3196453) | Cod sursa (job #272388) | Cod sursa (job #688264) | Cod sursa (job #517459)
Cod sursa(job #517459)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 2000001
char *s1,*s2;
long v[N],p[N],n,m;
int main()
{long i,k=0,t=0;
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
s1=(char*)malloc(N*sizeof(char));
s2=(char*)malloc(N*sizeof(char));
scanf("%s\n",s1);
scanf("%s\n",s2);
m=strlen(s1);
n=strlen(s2);
p[1]=0;
if(m>=n)
{i=1;
while(i<m)
{while(k>0&&s2[k+1]!=s1[i])
k=p[k];
if(s2[k+1]==s1[i])
k++;
if(k==n-1)
{v[t++]=i-n+1;
i=i-n+2;}
i++;}}
else
{i=1;
while(i<n)
{while(k>0&&s1[k+1]!=s2[i])
k=p[k];
if(s1[k+1]==s2[i])
k++;
if(k==m-1)
{v[t++]=i-m+1;
i=i-m+2;}
i++;}}
printf("%ld\n",t);
if(t<=1000)
{for(i=0;i<t;i++)
printf("%ld ",v[i]);
printf("\n");}
else
{for(i=0;i<1000;i++)
printf("%ld ",v[i]);
printf("\n");}
free(s1);
free(s2);
fclose(stdin);
fclose(stdout);
return 0;}