Cod sursa(job #177857)

Utilizator CezarMocanCezar Mocan CezarMocan Data 13 aprilie 2008 18:30:59
Problema Prefix Scor 20
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.28 kb
var s:string;
    pi:array[0..1001] of longint;
    n,i,j,t,q,x,max:longint;

begin
assign(input,'prefix.in');reset(input);
assign(output,'prefix.out');rewrite(output);
readln(t);
for q:=1 to t do
        begin
        fillchar(pi,sizeof(pi),0);
        readln(s);
        n:=length(s);
        pi[0]:=-1;
        pi[1]:=0;
        for i:=2 to n do
                begin
                x:=pi[i-1];
                if s[i]=s[x+1] then
                        pi[i]:=x+1
                else
                        begin
                        while x>=0 do
                                begin
                                x:=pi[x];
                                if x<0 then
                                        break;
                                if s[i]=s[x+1] then
                                        begin
                                        pi[i]:=x+1;
                                        break;
                                        end;
                                end;
                        end;
                end;
        max:=0;
        for i:=1 to n do
                if (i div (i-pi[i])>=2)and(i mod (i-pi[i])=0) then
                        max:=i;
        writeln(max);
        end;
close(input);close(output);
end.