Pagini recente » Cod sursa (job #2593003) | Cod sursa (job #912212) | Cod sursa (job #2659235) | Cod sursa (job #1096342) | Cod sursa (job #2420958)
#include <fstream>
#include <vector>
const std::string FILE_NAME { "strmatch" };
std::ifstream in { FILE_NAME + ".in" };
std::ofstream out { FILE_NAME + ".out" };
std::string a, b;
int solN;
std::vector<int> next(2000005), sol;
int main() {
in >> a >> b;
int j { 0 };
for (int i { 1 }; i < int(a.size()); ++i) {
while (j && a[i] != a[j])
j = next[j - 1];
if (a[i] == a[j])
++j;
next[i] = j;
}
j = 0;
for (int i { 0 }; i < int(b.size()); ++i) {
while (j && b[i] != a[j])
j = next[j - 1];
if (b[i] == a[j])
++j;
if (j == int(a.size())) {
if (solN < 1000)
sol.push_back(i - a.size() + 1);
++solN;
j = next[j - 1];
}
}
out << solN << '\n';
for (const auto& i : sol)
out << i << ' ';
}