Cod sursa(job #575302)

Utilizator dica69Alexandru Lincan dica69 Data 8 aprilie 2011 09:37:15
Problema Reuniune Scor 20
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.83 kb
type dreptunghi=record
                x0,y0,x1,y1:longint;
                end;

var a:array[1..3] of dreptunghi;
    t:dreptunghi;
    i,ar,pe,ai,pi:longint;
    s:byte;


function max(a,b:longint):longint;
begin
if a>b then max:=a
       else max:=b;
end;

function min(a,b:longint):longint;
begin
if a<b then min:=a
       else min:=b;
end;



procedure arie(a,b:dreptunghi;var ai:longint);
var t:dreptunghi;
begin
t.x0:=max(a.x0,b.x0);
t.x1:=min(a.x1,b.x1);
t.y0:=max(a.y0,b.y0);
t.y1:=min(a.y1,b.y1);
if (t.x0>t.x1) or (t.y0>t.y1) then
begin
t.x0:=0;t.y0:=0;t.x1:=0;t.y1:=0;
end;
ai:=abs(t.x1-t.x0)*abs(t.y1-t.y0);
end;


procedure perimetru(a,b:dreptunghi; var pi:longint);
var t:dreptunghi;
begin
t.x0:=max(a.x0,b.x0);
t.x1:=min(a.x1,b.x1);
t.y0:=max(a.y0,b.y0);
t.y1:=min(a.y1,b.y1);
if (t.x0>t.x1) or (t.y0>t.y1) then
begin
t.x0:=0;t.y0:=0;t.x1:=0;t.y1:=0;
end;
pi:=2*abs(t.x1-t.x0)+2*abs(t.y1-t.y0);
end;

procedure coord(a,b:dreptunghi; var t:dreptunghi; var s:byte);
begin
t.x0:=max(a.x0,b.x0);
t.x1:=min(a.x1,b.x1);
t.y0:=max(a.y0,b.y0);
t.y1:=min(a.y1,b.y1);
s:=1;
if (t.x0>t.x1) or (t.y0>t.y1) then s:=0;
end;


begin
assign(input,'reuniune.in');
reset(input);
assign(output,'reuniune.out');
rewrite(output);
for i:=1 to 3 do readln(a[i].x0,a[i].y0,a[i].x1,a[i].y1);

ar:=0;
for i:=1 to 3 do
ar:=ar+abs(a[i].y1-a[i].y0)*abs(a[i].x1-a[i].x0);

pe:=0;
for i:=1 to 3 do
pe:=pe+2*abs(a[i].y1-a[i].y0)+2*abs(a[i].x1-a[i].x0);


arie(a[1],a[2],ai);
ar:=ar-ai;
arie(a[1],a[3],ai);
ar:=ar-ai;
arie(a[2],a[3],ai);
ar:=ar-ai;
perimetru(a[1],a[2],pi);
pe:=pe-pi;
perimetru(a[1],a[3],pi);
pe:=pe-pi;
perimetru(a[2],a[3],pi);
pe:=pe-pi;

coord(a[1],a[2],t,s);
if s=1 then
begin
arie(t,a[3],ai);
ar:=ar+ai;
perimetru(t,a[3],pi);
pe:=pe+pi;
end;
write(ar,' ',pe);
end.