Pagini recente » Cod sursa (job #1736605) | Cod sursa (job #1651752) | Cod sursa (job #566624) | Cod sursa (job #8849) | Cod sursa (job #2738595)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
string a, b;
int main() {
fin >> a >> b;
vector<int> pi(a.length()+5, 0);
for(int i = 1; i < a.length(); i++) {
pi[i] = pi[i-1];
while(pi[i] > 0 && a[i] != a[pi[i]])
pi[i] = pi[pi[i]-1];
if(a[i] == a[pi[i]]) pi[i]++;
}
int q = 0;
int nr = 0;
vector<int> ans;
for(int i = 0; i < b.length(); i++) {
while(q > 0 && a[q] != b[i])
q = pi[q-1];
if(a[q] == b[i]) q++;
if(q == a.length()) {
nr++;
if(ans.size() < 1000)
ans.push_back(i-a.length()+1);
}
}
fout << nr << '\n';
for(auto x: ans) fout << x << ' ';
}