Cod sursa(job #332426)

Utilizator dcupsaoCupsa Darius dcupsao Data 17 iulie 2009 19:06:06
Problema Xor Max Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.39 kb
 var a:array[1..20000000] of longint;    
     b:array[0..22] of longint;    
     st,dr,z,i,x,y,n,max,j,poz:longint;    
     f,g:text;
 begin
assign(f,'xormax.in'); reset(f);    
 assign(g,'xormax.out'); rewrite(g);    
 read(f,n);    
 read(f,x);    
 y:=x; b[0]:=21; i:=1;    
 for j:=1 to b[0] do begin    
  b[j]:=y and 1;    
  y:=y shr 1;    
 end;    
 max:=x; st:=1; dr:=1;  
poz:=1;    
  for j:=b[0] downto 2 do begin    
  poz:=poz shl 1+b[j];    
  a[poz]:=-1;    
  end;    
  poz:=poz shl 1+b[1];    
  a[poz]:=i;    
for i:=2 to n do begin    
  read(f,y);    
  x:=x xor y;    
 y:=x;    
  for j:=1 to b[0] do begin    
   b[j]:=y and 1;    
   y:=y shr 1;    
  end;    
  y:=0;    
poz:=1;    
  for i:=b[0] downto 1 do begin    
  if a[(poz shl 1)+(b[i] xor 1)]<>0 then begin    
  y:=y shl 1+b[i] xor 1;    
  poz:=(poz shl 1)+(b[i] xor 1);    
  end    
  else begin    
   y:=y shl 1+b[i];    
   poz:=poz shl 1+b[i];    
  end;    
 end;    
 z:=a[poz];    
 if x xor y>max then begin    
   max:=x xor y;    
   st:=z;    
   dr:=i;    
  end;    
poz:=1;    
  for j:=b[0] downto 2 do begin    
  poz:=poz shl 1+b[j];    
  a[poz]:=-1;    
  end;    
  poz:=poz shl 1+b[1];    
  a[poz]:=i;   
end;    
 if st=dr then    
  writeln(g,max,' ',st,' ',dr)    
 else    
  writeln(g,max,' ',st+1,' ',dr);    
 close(f); close(g);    
end.