Pagini recente » Cod sursa (job #101927) | Cod sursa (job #2534276) | Cod sursa (job #729691) | Cod sursa (job #196599) | Cod sursa (job #186557)
Cod sursa(job #186557)
{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;
leng:longint;
function cautare_binara(x,y:longint):longint;
var mij:longint;
begin
if x=y then begin
leng:=x;
exit;
end
else begin
mij:=(x+y)div 2;
if ord(a[mij])=32 then cautare_binara(x,mij)
else cautare_binara(mij+1,y);
end;
end;
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
fillchar(a,sizeof(a),' ');
readln(f,a);
j:=1;
while ord(a[j])<>0 do j:=j+1;
dec(j);
{ cautare_binara(1,1000000);
if ord(a[leng])=32 then dec(leng,2);}
{ writeln(g,calc_pref(leng));}
end;
close(g);
closE(f);
end.