Pagini recente » Cod sursa (job #1915333) | Cod sursa (job #833320) | Cod sursa (job #1457494) | Cod sursa (job #37354) | Cod sursa (job #2791606)
#include <bits/stdc++.h>
using namespace std;
const int o = 5e5 * (1 << 2);
const int ooo = (1 << 1) * (1 << 0), oo_ = (1 << 1) + (1 << 0);
int _, oo, o_, _o[ooo * o + oo_], o_o, o__[ooo + 1000 + oo_];
char _oo[ooo * o + oo_], _o_[o + ooo / oo_];
void ___() {
for(int oooo = ooo / oo_, ooo_ = 0, oo_o = 0; oooo < o_; ++oooo) {
if(oooo <= oo_o) {
_o[oooo] = min(_o[oooo - ooo_], oo_o - oooo + 1);
}
while(oooo + _o[oooo] < o_ && _oo[_o[oooo]] == _oo[oooo + _o[oooo]]) {
++_o[oooo];
}
if(oooo + _o[oooo] - 1 > oo_o)
ooo_ = oooo, oo_o = oooo + _o[oooo] - ooo / ooo;
}
}
int main()
{
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
scanf("%s%s", _oo, _o_);
_ = strlen(_oo);
oo = strlen(_o_);
strcpy(_oo + _ + 1, _o_);
_oo[_] = '#';
o_ = _ + oo + ooo / ooo;
___();
for(int oooo = _ + 1; oooo < o_; ++oooo)
if(_o[oooo] == _) {
++o_o;
if(o_o <= 1000) o__[o_o] = oooo - _ - 1;
}
printf("%d\n", o_o);
o_o = min(o_o, 1000);
for(int oooo = 1; oooo <= o_o; ++oooo)
printf("%d ", o__[oooo]);
return 0;
}