Pagini recente » Cod sursa (job #2375142) | Cod sursa (job #12826) | Cod sursa (job #704649) | Cod sursa (job #706124) | Cod sursa (job #3235831)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
int n, i, j, l[4000002], r;
vector<int> poz;
string a, b;
int main() {
fin >> a >> b;
b = a + "@" + b;
n = b.size();
for(i = 1; i < n; i++) {
while(j > 0 && b[j] != b[i]) j = l[j - 1];
if(b[j] == b[i]) j++;
l[i] = j;
if(l[i] == a.size()) {
r++;
poz.push_back(i - a.size() + 1);
}
}
int lim = min((int)poz.size(), 1000);
fout << r << "\n";
for(i = 0; i < lim; i++) fout << poz[i] - a.size() - 1 << " ";
return 0;
}