Cod sursa(job #186348)

Utilizator dobreDobre Catalin Andrei dobre Data 27 aprilie 2008 18:59:42
Problema Prefix Scor 80
Compilator fpc Status done
Runda Arhiva de probleme Marime 0.93 kb
{9:05}
program prefix;
const fi='prefix.in';fo='prefix.out';
var pi:array[1..1000000]of longint;
    a:array[1..1000000]of char;
    f,g:text;
    i,j,t:longint;
function merge(leng,i:longint):boolean;
var ok:boolean;
begin
if i mod leng=0 then ok:=true
   else ok:=false;
merge:=ok;
end;

function calc_pref(n:longint):longint;
var k,q,sol:longint;
    i:longint;
    leng:longint;
begin
fillchar(pi,sizeof(pi),0);
k:=0;
pi[1]:=0;sol:=0;leng:=0;
for i:=2 to n do begin
     while(k>0)and(a[k+1]<>a[i])do k:=pi[k];
     if a[k+1]=a[i] then inc(k);
     pi[i]:=k;
     if(k>0)and(merge(i-pi[i],i)) then sol:=i;
    end;
calc_pref:=sol;
end;

begin
assign(f,fi);reset(f);
assign(g,fo);rewrite(g);
readln(f,T);
for i:=1 to T do begin
     j:=1;
     fillchar(a,sizeof(a),' ');
     readln(f,a);
     while ord(a[j])<>0 do j:=j+1;
     dec(j);
     writeln(g,calc_pref(j));
    end;
close(g);
closE(f);
end.