Pagini recente » Cod sursa (job #813994) | Cod sursa (job #2242793) | Cod sursa (job #1449420) | Cod sursa (job #756059) | Cod sursa (job #150274)
Cod sursa(job #150274)
#include <stdio.h>
#include <string.h>
#define SMAX 2000001
#define RMAX 1005
int next[SMAX], r[RMAX], n, m, nr;
char s[SMAX], p[SMAX];
int main()
{
int i, j, ex;
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
scanf("%s %s", p, s);
n = strlen(s);
m = strlen(p);
j = -1;
next[0] = -1;
for ( i = 0; i < m; )
{
while ( j > -1 && p[i] != p[j])
j = next[j];
j++;
i++;
if ( p[i] == p[j])
next[i] = next[j];
else
next[i] = j;
}
j = 0;
ex = 1;
for ( i = 0; i < n && ex; )
{
while ( j > -1 && s[i] != p[j])
j = next[j];
j++;
i++;
if ( j >= m )
{
nr++;
if ( nr <= 1000)
r[nr] = i - j;
j = next[j];
}
}
printf("%d\n", nr);
for ( i = 1; i <= nr && i <= 1000; i++)
printf("%d ", r[i]);
}