Вы неправильно инициализируете свои массивы,
int i, j=0,ready[256],skip2[256][mlen-1],neq;
for(i=0; i<256; ++i) ready[i] = mlen;
for(int a=0; a<256;a++) {
for(i = mlen;i>mlen-k;i--)
skip2[i][a] = mlen;
}
С одной стороны, вы объявляете skip2
как массив 256×(mlen-1)
, с другой стороны, вы заполняете его как массив (mlen+1)×256
.
В следующем цикле,
for(i = mlen-2;i>=1;i--) {
for(j=ready[pattern[i]]-1;j>=max(i,mlen-k);j--)
skip2[j][pattern[i]] = j-i;
ready[pattern[i]] = max(i,mlen-k);
}
вы используете ready[pattern[i]]
до того, как он был установлен. Я не знаю, являются ли эти ошибки причиной неудачного теста, но легко предположить, что они делают.