Pagini recente » Cod sursa (job #1040284) | Cod sursa (job #976084) | Cod sursa (job #2700544) | Cod sursa (job #2963746) | Cod sursa (job #1818090)
#include <bits/stdc++.h>
using namespace std;
int f[2000001];
int n, m, p=2, k, p1, p2, nr;
int sol[1001];
int main()
{
ifstream cin ("strmatch.in");
ofstream cout("strmatch.out");
string a, b;
cin >> a >> b;
n = a.length(), m = b.length();
f[0] = -1, f[1] = 0;
while (p < n) {
if (a[p-1] == a[k]) f[p++] = ++k;
else
if (k>0) k = f[k];
else f[p++] = 0;
}
while (p1 + p2 < m) {
if (a[p2] == b[p1 + p2])
if (p2 == n - 1) {
if (++nr <= 1000) sol[nr-1] = p1;
if (f[p2] > -1) p1 += p2 - f[p2], p2 = f[p2];
else p2 = 0, p1++;
}
else p2++;
else
if (f[p2] > -1) p1 += p2 - f[p2], p2 = f[p2];
else p2 = 0, p1++;
}
cout << nr << "\n";
for (int i = 0; i < nr; i++) cout << sol[i] << " ";
}