Я решал приложенную задачу как будто это строка (алфавит до 100000 символов получается), т.е. через хэши на delphi. Онм хранились в массиве int64, т.е. намного обрезались и ,видимо, поэтому неправильный ответ на 27 тесте. кто-нибудь подскажет как решить лучше, что бы было меньше коллизий(один хэш для разных строк).
program cubes;
{$APPTYPE CONSOLE}
uses
SysUtils;
var f,f1:text;
p:array[0..100000] of int64;
h1,h2,s:array[0..100000] of int64;
n,m,i:integer;
function ok(d:integer):boolean;
var i:integer;
begin
for i:=d downto 1 do if s[i]<>s[2*d-i+1] then begin ok:=false;exit end;
ok:=true;
end;
function prost(a:integer):boolean;
var i:integer;
begin
if a=2 then begin prost:=false; exit end;
for i:=a div 2 downto 2 do if a mod i=0 then begin prost:=false; exit end;
prost:=true;
end;
begin
reset(f,'cubes.in');
rewrite(f1,'cubes.out');
readln(f,n,m);
while not prost(m) do m:=m+1;
p[0]:=1; p[1]:=m;
for i:=2 to n do p[i]:=p[i-1]*m;{степени P}
for i:=1 to n do begin
read(f,s[i]);
h1[i]:=h1[i-1]+s[i]*p[i-1]
end;
for i:=1 to n do h2[i]:=h2[i-1]+s[n-i+1]*p[i-1];
{хэши префиксов и обратные хэши префиксов}
for i:=n div 2 downto 0 do
if h1[i]*p[n-2*i]=h2[n-i]-h2[n-2*i] then write(f1,n-i,' ');
close(f);
close(f1);
end.