Cod sursa(job #575151)

Utilizator dica69Alexandru Lincan dica69 Data 7 aprilie 2011 23:03:50
Problema Reuniune Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.62 kb
type dreptunghi=record
                x0,y0,x1,y1:longint;
                end;

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



function arie(a,b:dreptunghi):longint;
var ar:longint;
begin
if (b.y1>=a.y1) and (b.y0>=a.y0) and (b.x0<=a.x1) and (a.y0<=b.y0) and (b.y0<=a.y1) then
ar:=abs(a.y1-b.y0)*abs(a.x1-b.x0)
else if (b.y1<=a.y1) and (b.y0>=a.y0) and (b.x0<=a.x1) and (b.y1>=a.y0) then
ar:=abs(b.y1-a.y0)*abs(a.x1-b.x0)
else if (b.y1>=a.y1) and (b.y1>=a.y0) and (b.x1<=a.x1) and (b.y0<=a.y1) and (b.y0>=a.y0) then
ar:=abs(a.y1-b.y0)*abs(b.x1-a.x0)
else if (b.y1<=a.y1) and (b.y1>=a.y0) and (b.x1<=a.x1) and (b.y1>=a.y0) then
ar:=abs(b.y1-a.y0)*abs(b.y1-a.y0)
else ar:=0;
arie:=ar;
end;

function perimetru(a,b:dreptunghi):longint;
var p:longint;
begin
if (b.y1>=a.y1) and (b.y0>=a.y0) and (b.x0<=a.x1) and (a.y0<=b.y0) and (b.y0<=a.y1) then
p:=2*abs(a.y1-b.y0)+ 2*abs(a.x1-b.x0)
else if (b.y1<=a.y1) and (b.y0>=a.y0) and (b.x0<=a.x1) and (b.y1>=a.y0) then
p:=2*abs(b.y1-a.y0)+2*abs(a.x1-b.x0)
else if (b.y1>=a.y1) and (b.x1>=a.x0) and (b.x1<=a.x1) and (b.y0<=a.y1) and (b.y0>=a.y0) then
p:=2*abs(a.y1-b.y0)+2*abs(b.x1-a.x0)
else if (b.y1<=a.y1) and (b.x1>=a.x0) and (b.x1<=a.x1) and (b.y1>=a.y0) then
p:=2*abs(b.y1-a.y0)+2*abs(b.y1-a.y0)
else p:=0;
perimetru:=p;
end;

procedure coord(a,b:dreptunghi; var t:dreptunghi; var s:byte);
begin
if (b.y1>=a.y1) and (b.y0>=a.y0) and (b.x0<=a.x1) and (a.y0<=b.y0) and (b.y0<=a.y1) then
begin
t.x0:=b.x0;
t.y0:=b.y0;
t.x1:=a.x1;
t.y1:=a.y1;
s:=1;
end
else if (b.y1<=a.y1) and (b.y0>=a.y0) and (b.x0<=a.x1) and (b.y1>=a.y0) then
begin
t.x0:=a.x0;
t.y0:=b.y0;
t.x1:=b.x0;
t.y1:=a.y0;
s:=1;
end
else if (b.y1>=a.y1) and (b.y1>=a.y0) and (b.x1<=a.x1) and (b.y0<=a.y1) and (b.y0>=a.y0) then
begin
t.x0:=b.x0;
t.y0:=a.y0;
t.x1:=a.x0;
t.y1:=b.y0;
s:=1;
end
else if (b.y1<=a.y1) and (b.y1>=a.y0) and (b.x1<=a.x1) and (b.y1>=a.y0) then
begin
t.x0:=a.x0;
t.y0:=a.y0;
t.x1:=b.x1;
t.y1:=b.y1;
s:=1;
end
else 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);


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

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