Cod sursa(job #331383)

Utilizator doruletzPetrican Teodor doruletz Data 13 iulie 2009 21:04:04
Problema Reuniune Scor 10
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.46 kb
var x0,y0,x1,y1:array[0..3]of longint;
    final,final1:int64;
    ij:byte;
    t:text;
    

function max(i,j:longint):longint;
begin
 if i>j then max:=i else max:=j;
end;

function min(ii,jj:longint):longint;
begin
 if ii<jj then min:=ii else min:=jj;
end;

function arie(x,y,z:byte):longint;
var a,b,c,d:longint;
begin
 if y=0 then y:=x;
 a:=max(x0[x],x0[y]);
 b:=max(y0[x],y0[y]);
 c:=min(x1[x],x1[y]);
 d:=min(y1[x],y1[y]);
 if not(((a=x0[x])and(b=y0[x]))or((a=x0[y])and(b=y0[y]))) then begin
  a:=min(x1[x],x1[y]);
  b:=max(y0[x],y0[y]);
  c:=max(x0[x],x0[y]);
  d:=min(y1[x],y1[y]);
 end;
 if z=1 then begin
  x0[0]:=a;
  y0[0]:=b;
  x1[0]:=c;
  y1[0]:=d;
  if not(((a=x0[x])and(b=y0[x]))or((a=x0[y])and(b=y0[y]))) then begin
   x1[0]:=a;
   y0[0]:=b;
   x0[0]:=c;
   y1[0]:=d;
  end;
  y:=0;
  x:=3;
  a:=max(x0[x],x0[y]);
  b:=max(y0[x],y0[y]);
  c:=min(x1[x],x1[y]);
  d:=min(y1[x],y1[y]);
  if not(((a=x0[x])and(b=y0[x]))or((a=x0[y])and(b=y0[y]))) then begin
   a:=min(x1[x],x1[y]);
   b:=max(y0[x],y0[y]);
   c:=max(x0[x],x0[y]);
   d:=min(y1[x],y1[y]);
  end;
 end;
 arie:=(c-(a+1)+1)*(d-(b+1)+1);
end;

function perimetru(x,y,z:byte):longint;
var a,b,c,d:longint;
begin
 if y=0 then y:=x;
 a:=max(x0[x],x0[y]);
 b:=max(y0[x],y0[y]);
 c:=min(x1[x],x1[y]);
 d:=min(y1[x],y1[y]);
 if not(((a=x0[x])and(b=y0[x]))or((a=x0[y])and(b=y0[y]))) then begin
  a:=min(x1[x],x1[y]);
  b:=max(y0[x],y0[y]);
  c:=max(x0[x],x0[y]);
  d:=min(y1[x],y1[y]);
 end;
 if z=1 then begin
  x0[0]:=a;
  y0[0]:=b;
  x1[0]:=c;
  y1[0]:=d;
  if not(((a=x0[x])and(b=y0[x]))or((a=x0[y])and(b=y0[y]))) then begin
   x1[0]:=a;
   y0[0]:=b;
   x0[0]:=c;
   y1[0]:=d;
  end;
  y:=0;
  x:=3;
  a:=max(x0[x],x0[y]);
  b:=max(y0[x],y0[y]);
  c:=min(x1[x],x1[y]);
  d:=min(y1[x],y1[y]);
  if not(((a=x0[x])and(b=y0[x]))or((a=x0[y])and(b=y0[y]))) then begin
   a:=min(x1[x],x1[y]);
   b:=max(y0[x],y0[y]);
   c:=max(x0[x],x0[y]);
   d:=min(y1[x],y1[y]);
  end;
 end;
 perimetru:=(c-(a+1)+1)*2+(d-(b+1)+1)*2;
end;

begin
 assign(t,'reuniune.in'); reset(t);
 for ij:=1 to 3 do readln(t,x0[ij],y0[ij],x1[ij],y1[ij]);
 close(t);

  final:=arie(1,0,0)+arie(2,0,0)+arie(3,0,0)-arie(1,2,0)-arie(1,3,0)-arie(2,3,0)+arie(1,2,1);
final1:=perimetru(1,0,0)+perimetru(2,0,0)+perimetru(3,0,0)-perimetru(1,2,0)-perimetru(1,3,0)-perimetru(2,3,0)+perimetru(1,2,1);

 assign(t,'reuniune.out'); rewrite(t);
 writeln(t,final,' ',final1);
 close(t);
end.