Pagini recente » Cod sursa (job #1971836) | Cod sursa (job #2876437) | Cod sursa (job #2620278) | Cod sursa (job #3239625) | Cod sursa (job #143808)
Cod sursa(job #143808)
#include <stdio.h>
#include <string.h>
#define prim 97
#define nmax 2048000
#define mmax 2048000
#define find 1024
char T[nmax], P[mmax];
int V[find];
int N, M, i, pattern, modulo, j, ok, k;
int main(void)
{
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
scanf("%s\n", P);
scanf("%s", T);
N = strlen(T);
M = strlen(P);
for (i = 0; i < M; ++i)
{
pattern = (pattern + P[i] - 'a') % prim;
modulo = (modulo + T[i] - 'a') % prim;
}
for (i = 0; i <= N - M; ++i)
{
if (modulo == pattern)
{
for (j = i, ok = 1; j < i + M && ok; ++j)
if (T[j] != P[j-i]) ok = 0;
if (ok && k < 1000)
V[++k] = i;
}
modulo = (modulo + T[i + M] - T[i] % prim) % prim;
}
printf("%d\n", k);
for (i = 1; i < k; ++i) printf("%d ", V[i]); printf("%d\n", V[i]);
return 0;
}