Cod sursa(job #135432)

Utilizator radu_voroneanuVoroneanu Radu Stefan radu_voroneanu Data 13 februarie 2008 19:40:28
Problema Reuniune Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.58 kb
type drept=record
      x0,y0:longint;
      x1,y1:longint;
      ok:boolean;
     end;

var a:array[1..4] of drept;
    f,g:text;
    pe,ar:qword;

function min(x,y:longint):longint;
 begin
  if x<y then
   min:=x
  else
   min:=y;
 end;

function max(x,y:longint):longint;
 begin
  if x<y then
   max:=y
  else
   max:=x;
 end;

function inter(x,y:drept):drept;
 begin
  inter.x0:=max(x.x0, y.x0);
  inter.y0:=max(x.y0, y.y0);
  inter.x1:=min(x.x1, y.x1);
  inter.y1:=min(x.y1, y.y1);
  inter.ok:=true;
  if inter.x0>inter.x1 then
   inter.ok:=false;
  if inter.y0>inter.y1 then
   inter.ok:=false;
 end;

function arie(x:drept):qword;
 var s:qword;
 begin
  if x.ok then begin
   s:=(x.x1-x.x0);
   s:=s*(x.y1-x.y0);
   arie:=s;
  end
  else
   arie:=0;
 end;

function per(x:drept):qword;
 var s:qword;
 begin
  if x.ok then begin
   s:=(x.x1-x.x0);
   s:=s+(x.y1-x.y0);
   s:=s*2;
   per:=s;
  end
  else
   per:=0;
 end;

begin
 assign(f,'reuniune.in'); reset(f);
 assign(g,'reuniune.out'); rewrite(g);
 read(f,a[1].x0,a[1].y0,a[1].x1,a[1].y1,a[2].x0,a[2].y0,a[2].x1,a[2].y1,a[3].x0,a[3].y0,a[3].x1,a[3].y1);
 a[1].ok:=true;
 a[2].ok:=true;
 a[3].ok:=true;
 ar:=0;
 ar:=arie(a[1])+arie(a[2])+arie(a[3]);
 ar:=ar-arie(inter(a[1],a[2]))-arie(inter(a[3],a[2]))-arie(inter(a[1],a[3]));
 ar:=ar+arie(inter(a[1], inter(a[2],a[3])));
 pe:=per(a[1])+per(a[2])+per(a[3]);
 pe:=pe-per(inter(a[1],a[2]))-per(inter(a[3],a[2]))-per(inter(a[1],a[3]));
 pe:=pe+per(inter(a[1], inter(a[2],a[3])));
 writeln(g,ar,' ',pe);
 close(f); close(g);
end.