Pagini recente » Cod sursa (job #1675440) | Cod sursa (job #734782) | Cod sursa (job #895350) | Cod sursa (job #264481) | Cod sursa (job #3189629)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
int n, i, j, a[4000012], r;
vector<int> poz;
string p, t;
int main() {
fin >> p >> t;
t = p + "@" + t;
n = t.size();
for(i = 1; i < n; i++) {
while(j > 0 && t[j] != t[i]) j = a[j - 1];
if(t[j] == t[i]) j++;
a[i] = j;
if(a[i] == p.size()) {
r++;
poz.push_back(i - p.size() + 1);
}
}
int f = min((int)poz.size(), 1000);
fout << r << "\n";
for(i = 0; i < f; i++) fout << poz[i] - p.size() - 1 << " ";
return 0;
}