Pagini recente » Cod sursa (job #469113) | Cod sursa (job #1266414) | Cod sursa (job #582047) | Cod sursa (job #281474) | Cod sursa (job #2931504)
#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 - 1];
j += (needle[i] == needle[j]);
prefix[i] = j;
}
vector<size_t> ans;
for (size_t i = 0, j = 0; i < haystack.size(); ++i) {
while (j && haystack[i] != needle[j])
j = prefix[j - 1];
j += (haystack[i] == needle[j]);
if (j == needle.size()) {
j = prefix[j - 1];
ans.push_back(i + 1 - needle.size());
}
}
fout << ans.size() << '\n';
for (auto it = ans.begin(); it != ans.end() && it != ans.begin() + 1000; ++it)
fout << *it << ' ';
fout << '\n';
}