Pagini recente » Cod sursa (job #654112) | Cod sursa (job #1713620) | Cod sursa (job #863023) | Cod sursa (job #1186010) | Cod sursa (job #2909890)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
string a, b;
int pos[1000], pin;
int main() {
f >> a >> b;
vector<int> ta(a.size(), -1);
for (size_t i = 1; i < ta.size(); i++)
{
if (a[i] == a[ta[i - 1] + 1]) ta[i] = ta[i - 1] + 1;
else if (a[i] == a[0]) ta[i] = 0;
}
int j = -1;
for (size_t i = 0; i < b.size(); i++)
{
if (b[i] == a[j+1]) {
j++;
if (j == a.size() - 1) { if (pin < 9999) pos[pin] = i - j; pin++; j = ta[j]; i--; }
}
else if(j != -1) {
j = ta[j]; i--;
}
}
g << pin << endl;
for (size_t e = 0; e < pin && e < 1000; e++)
{
g << pos[e] << " ";
}
}