Pagini recente » Cod sursa (job #215742) | Cod sursa (job #1548955) | Cod sursa (job #1832516) | Cod sursa (job #2942463) | Cod sursa (job #349442)
Cod sursa(job #349442)
#include <stdio.h>
char P[2000002], T[2000002];
int U, V, Q, M, N;
int R[1002];
int main()
{
int i, k, l;
Q = 666013;
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
gets(P);
gets(T);
for (M = 0; P[M]; ++M);
for (N = 0; T[N]; ++N);
for (i = 0; i < M; ++i)
U = (U + P[i]) % Q;
for (i = 0; i < M; ++i)
V = (V + T[i]) % Q;
for (i = M-1; i < N; ++i)
{
if (V == U)
{
for (k = 0, l = i-M+1; k < M; ++k, ++l)
if (P[k] != T[l])
break;
if (k == M)
if (R[0] < 1000)
R[++R[0]] = i-M+1;
}
V -= T[i-M+1];
V += T[i+1];
while (V < 0)
V += Q;
}
printf("%d\n", R[0]);
for (i = 1; i <= R[0]; ++i)
printf("%d ", R[i]);
printf("\n");
return 0;
}