Pagini recente » Cod sursa (job #1124939) | Cod sursa (job #2878041) | Cod sursa (job #2242315) | Cod sursa (job #2612223) | Cod sursa (job #143877)
Cod sursa(job #143877)
#include <stdio.h>
#include <string.h>
#define Nmax 2000005
char P[Nmax], S[Nmax];
int c[1024], pi[Nmax], i, j, n, m;
int main()
{
freopen("strmatch.in", "r", stdin);
scanf("%s\n%s", &P, &S);
fclose(stdin);
for (i=0, pi[0]=-1, j=-1, m=strlen(P); i<m; i++, pi[i]=++j)
while (j>=0 && P[i]!=P[j])
j=pi[j];
for (i=0, j=0, n=strlen(S); i<=n; i++)
{
while (P[j] !=S[i] && j) j=pi[j];
if (P[j]==S[i]) j++;
if (j==m)
{
c[0]++;
if (c[0]<=1000) c[c[0]]=i-m+1;
j=pi[j];
}
}
freopen("strmatch.out", "w", stdout);
printf("%d\n", c[0]);
for (i=1; i<=c[0]<1000?c[0]:1000; i++) printf("%d ", c[i]);
fclose(stdout);
return 0;
}