Pagini recente » Cod sursa (job #518318) | Cod sursa (job #788598) | Cod sursa (job #581909) | Cod sursa (job #2141918) | Cod sursa (job #169705)
Cod sursa(job #169705)
#include <stdio.h>
#include <string.h>
#define minim(a, b) ((a < b) ? a : b)
#define NM 2000002
char N[NM],M[NM],a[3];
int pi[NM], sol[1002];
FILE *f,*g,*f2,*g2;
int main()
{
int k,n,i,m,q;
long nr=1,x;
f=fopen("strmatch.in","rt");
g=fopen("strmatch.out","wt");
fgets(N+1,NM,f);
fgets(a,2,f);
fgets(M+1,NM,f);
n = strlen(N+1);
N[n]=0;
n--;
k = 0;
pi[1] = 0;
for (i = 2; i <= n; i++)
{
while (k>0 && N[k+1]!=N[i])
k=pi[k];
if (N[k+1]==N[i])
k++;
pi[i]=k;
}
m = strlen(M+1); n = strlen(N+1);
q = 0;
for (i=1; i<=m; i++)
{
while (q > 0 && N[q+1] != M[i])
q = pi[q];
if (N[q+1] == M[i])
q++;
if (q==n) sol[nr++]=i-n+1;
}
fprintf(g,"%ld\n",nr-1);
for (i=1;i<=minim(nr-1,1000);i++)
{
fprintf(g,"%ld ",sol[i]);
}
fclose(f);
fclose(g);
return 0;
}