Cod sursa(job #331504)

Utilizator doruletzPetrican Teodor doruletz Data 14 iulie 2009 11:40:14
Problema Reuniune Scor 20
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.49 kb
var x0,y0,x1,y1:array[0..3]of longint;
    final,final1:extended;
    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:=abs((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:=abs((c-(a+1)+1)*2)+abs((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,trunc(final),' ',trunc(final1));
 close(t);
end.