Pagini recente » Cod sursa (job #815084) | Cod sursa (job #2389117) | Cod sursa (job #758678) | Cod sursa (job #265963) | Cod sursa (job #2595956)
#include <bits/stdc++.h>
#define N 2000001
#define LIM 1000
using namespace std;
char s[N], t[N];
int pi[N];
void compute () {
int i=1, len=0;
while (t[i])
if (t[i]==t[len])
pi[i++]=++len;
else
if (len)
len=pi[len-1];
else
pi[i++]=0;
}
int main () {
ifstream fin ("strmatch.in");
ofstream fout ("strmatch.out");
vector <int> ans;
fin >> t >> s;
compute();
int i=0, j=0;
while (s[i] && ans.size()!=LIM)
if (s[i]==t[j]) {
++i, ++j;
if (!t[j]) {
ans.push_back(i-j);
j=pi[j-1];
}
}
else
if (j)
j=pi[j-1];
else
++i;
fout << ans.size() << '\n';
for (auto it: ans)
fout << it << ' ';
return 0;
}