Pagini recente » Cod sursa (job #2520618) | Cod sursa (job #81387) | Cod sursa (job #586590) | Rating Albu Alexandru (1salut1) | Cod sursa (job #695980)
Cod sursa(job #695980)
#include <cstring>
#include <cstdio>
#include <cmath>
const int mx = 2000002;
int n;
int m;
char a[mx];
char b[mx];
int k[mx];
void create() {
for (int i = 1; i < n; ++i) {
int p = k[i - 1];
if (a[i] == a[p]) {
k[i] = p + 1;
} else {
k[i] = 0;
}
}
}
int num;
int s[1000];
int main() {
FILE * in = fopen("strmatch.in", "rt");
FILE * out = fopen("strmatch.out", "wt");
n = strlen(fgets(a, mx, in)) - 1;
m = strlen(fgets(b, mx, in)) - 1;
create();
for (int i = 0; i < n; ++i) {
printf("%c %d\n", a[i], k[i]);
}
for (int i = 0, j = 0; j < m; ++i, ++j) {
if (b[j] == a[i]) {
} else if (k[i] && b[j] == a[k[i] - 1]) {
i = k[i] - 1;
} else {
i = 0;
}
if (i == n - 1) {
i = k[i] - 1;
if (num < 1000) {
s[num] = j - n + 1;
}
++num;
}
}
fprintf(out, "%d\n", num);
for (int i = 0; i < num; ++i) {
fprintf(out, "%d ", s[i]);
}
fclose(in);
fclose(out);
}