Pagini recente » Cod sursa (job #1972646) | Cod sursa (job #576876) | Concurs clasa a 9-a (Avansati) | Cod sursa (job #2205587) | Cod sursa (job #143863)
Cod sursa(job #143863)
#include <stdio.h>
#include <string.h>
#define Nmax 2000001
char P[Nmax], S[Nmax];
int c[1005], 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)
{
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]; i++) printf("%d ", c[i]);
fclose(stdout);
return 0;
}