Pagini recente » Cod sursa (job #2534378) | Cod sursa (job #3212485) | Cod sursa (job #2961711) | Cod sursa (job #2399915) | Cod sursa (job #2931496)
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
string needle, haystack;
fin >> needle >> haystack;
vector<size_t> prefix(needle.size());
prefix[0] = 0;
size_t i = 1, j = 0;
for (size_t i = 1, j = 0; i < needle.size(); ++i) {
while (j && needle[i] != needle[j])
j = prefix[j];
j += (needle[i] == needle[j]);
prefix[i] = j;
}
for (int x : prefix)
cout << x << ' ';
vector<size_t> ans;
for (size_t i = 0, j = 0; i < haystack.size(); ++i) {
while (j && haystack[i] != needle[j])
j = prefix[j];
if (haystack[i] == needle[j]) {
if (j + 1 == needle.size()) {
j = prefix[j];
ans.push_back(i - needle.size() + 1);
} else
++j;
}
}
fout << ans.size() << '\n';
for (auto it = ans.begin(); it != ans.end() && it != ans.begin() + 1000; ++it)
fout << *it << ' ';
fout << '\n';
}