Pagini recente » Cod sursa (job #2583612) | Cod sursa (job #2716433) | Cod sursa (job #1941881) | Cod sursa (job #2986248) | Cod sursa (job #3005676)
#include <bits/stdc++.h>
#define MAXSZ 2000005
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
char a[MAXSZ], b[MAXSZ];
int lps[MAXSZ];
int main() {
fin.getline(a, MAXSZ);
fin.getline(b, MAXSZ);
int aSz = (int) strlen(a);
int bSz = (int) strlen(b);
lps[0] = lps[1] = 0;
int q = 0;
for (int i = 2; i <= aSz; i++) {
while (q > 0 && a[q] != a[i - 1])
q = lps[q];
if (a[q] == a[i - 1])
q++;
lps[i] = q;
}
vector<int> matches;
q = 0;
for (int i = 0; i < bSz; i++) {
while (q > 0 && a[q] != b[i])
q = lps[q];
if (a[q] == b[i])
q++;
if (q == aSz) {
matches.push_back(i - aSz + 1);
q = lps[q];
}
}
fout << matches.size() << '\n';
for (int i = 0; i < min(1000, (int) matches.size()); i++)
fout << matches[i] << ' ';
return 0;
}