Pagini recente » Cod sursa (job #2553271) | Cod sursa (job #622126) | Cod sursa (job #441195) | Cod sursa (job #1667154) | Cod sursa (job #1944068)
#include <bits/stdc++.h>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
char a[2000002], b[2000002];
int i, q, lung[2000002], vs[1005], sol, n, m;
int main() {
f >> a+1 >> b+1;
n = strlen(a+1), m = strlen(b+1);
for (i = 2; i <= n; i++) {
while (a[q+1] != a[i] && q)
q = lung[q];
if (a[q+1] == a[i]) q++;
lung[i] = q;
}
for (i = 1, q = 0; i <= m; i++) {
while (a[q+1] != b[i] && q)
q = lung[q];
if (a[q+1] == b[i]) q++;
if (q == n) {
if (sol<=1000)
vs[++sol] = i-q;
}
}
g << sol << '\n';
for (i = 1; i <= sol; i++)
g << vs[i] << ' ';
return 0;
}