Pagini recente » Cod sursa (job #677858) | Cod sursa (job #3255427) | Cod sursa (job #45887) | Cod sursa (job #2327875) | Cod sursa (job #2985470)
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
const int LIMIT = 1000;
int lps[4000005], num;
vector <int> solutions;
string a, b, s;
int main()
{
fin >> a >> b;
s = '$' + a + '$' + b;
int sLen = s.length();
int aLen = a.length();
for (int i = 2; i < sLen; i++) {
int currLetter = s[i];
int currIdx = lps[i - 1];
while (currIdx && currLetter != s[currIdx + 1]) {
currIdx = lps[currIdx];
}
if (currLetter == s[currIdx + 1]) {
currIdx++;
}
lps[i] = currIdx;
for (int j = 1; j <= aLen; j++) {
cout << lps[j] << ' ';
}
cout << '\n';
if (currIdx == aLen) {
num++;
if (num <= LIMIT) {
solutions.push_back(i - 2 * aLen - 1);
}
}
}
fout << num << '\n';
for(int x : solutions) {
fout << x << ' ';
}
return 0;
}