Cod sursa(job #125609)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 20 ianuarie 2008 15:10:33
Problema Inundatii Scor 70
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.29 kb
var fi,fo:text;
    xi,yi,zi:array[1..50000]of int64;
    i,j:longint;
    n,x,y,z,x1,x2,y1,y2,z1,z2,min:int64;
begin
  assign(fi,'inundatii.in'); reset(fi);
  assign(fo,'inundatii.out'); rewrite(fo);
  read(fi,n);
  min:=0;
  for i:=1 to n do
    read(fi,xi[i],yi[i],zi[i]);
  if (n and 1=1) then
    begin
      x1:=xi[n shr 1 + 1]-1; y1:=yi[n shr 1 + 1]-1; z1:=zi[n shr 1 + 1]-1;
      x2:=xi[n shr 1 + 1]+1; y2:=yi[n shr 1 + 1]+1; z2:=zi[n shr 1 + 1]+1;
      for i:=n shr 1 downto 1 do
        begin
          min:=min+abs(xi[i]-x1)+abs(yi[i]-y1)+abs(zi[i]-z1);
          dec(x1); dec(y1); dec(z1);
          min:=min+abs(xi[n-i+1]-x2)+abs(yi[n-i+1]-y2)+abs(zi[n-i+1]-z2);
          inc(x2); inc(y2); inc(z2);
        end
    end
  else
    begin
      x:=(xi[n shr 1]+xi[n shr 1 + 1]) shr 1;
      y:=(yi[n shr 1]+yi[n shr 1 + 1]) shr 1;
      z:=(zi[n shr 1]+zi[n shr 1 + 1]) shr 1;
      x1:=x; y1:=y; z1:=z;
      x2:=x+1; y2:=y+1; z2:=z+1;
      for i:=n shr 1 downto 1 do
        begin
          min:=min+abs(xi[i]-x1)+abs(yi[i]-y1)+abs(zi[i]-z1);
          dec(x1); dec(y1); dec(z1);
          min:=min+abs(xi[n-i+1]-x2)+abs(yi[n-i+1]-y2)+abs(zi[n-i+1]-z2);
          inc(x2); inc(y2); inc(z2);
        end;
    end;
  writeln(fo,min);
  close(fi);
  close(fo);
end.