Pagini recente » Cod sursa (job #2544008) | Cod sursa (job #2117242)
#include <stdio.h>
#include <string.h>
#define SIZE 2000000
#define LIM 1000
static char t[SIZE+2], p[SIZE+2];
static size_t pi[SIZE+1], s[SIZE+1];
int main(void)
{
size_t i, k, plen, tlen, n = 0;
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
fgets(p + 1, SIZE+1, stdin);
plen = strlen(p + 1) - 1;
fgets(t + 1, SIZE+1, stdin);
tlen = strlen(t + 1) - 1;
pi[1] = 0;
k = 0;
for (i = 2; i <= plen; i++) {
while (k > 0 && p[k + 1] != p[i]) {
k = pi[k];
}
if (p[k + 1] == p[i]) {
k++;
}
pi[i] = k;
}
k = 0;
for (i = 1; i <= tlen; i++) {
while (k > 0 && p[k + 1] != t[i]) {
k = pi[k];
}
if (p[k + 1] == t[i]) {
k++;
}
if (k == plen) {
s[n] = i - plen;
n++;
if (n == LIM) {
break;
}
}
}
printf("%lu\n", n);
for (i = 0; i < n; i++) {
printf("%lu ", s[i]);
}
return 0;
}