Cod sursa(job #4801)

Utilizator vanila0406Ionescu Victor vanila0406 Data 7 ianuarie 2007 14:40:38
Problema Reuniune Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 4.89 kb
program reuniune;
var f,g:text;
        x1,x2,x3,x4,x5,x6,y1,y2,y3,y4,y5,y6,ax1,ax2,ay1,ay2:longint;
        atotal,pertotal:longint;


procedure init;
begin
        assign(f,'reuniune.in');
        reset(f);
        assign(g,'reuniune.out');
        rewrite(g);
        readln(f,x1,y1,x2,y2);
        readln(f,x3,y3,x4,y4);
        readln(f,x5,y5,x6,y6);
        close(f);
end;




function arie(var x1,y1,x2,y2:longint):longint;
begin
        arie:=(x2-x1)*(y2-y1);
end;


function per(var x1,y1,x2,y2:longint):longint;
begin
        per:=2*(x2-x1+y2-y1);
end;




function inter(var x1,y1,x2,y2,x3,y3,x4,y4:longint):byte;
begin
        if ((x1>=x3)and(x2<=x4)and(y1>=y3)and(y2<=y4))
        or ((x1<=x3)and(x2>=x4)and(y1<=y3)and(y2>=y4)) then inter:=5 else
        if (x2>=x3)and(x2<=x4)and(y2>=y3)and(y2<=y4) then inter:=4 else
        if (y1<=y4)and(y1>=y3)and(x1<=x4)and(x1>=x3) then inter:=2 else
        if (y2>=y3)and(y2<=y4)and(x1>=x3)and(x1<=x4) then inter:=1 else
        if (y1>=y3)and(y1<=y4)and(x2>=x3)and(x2<=x4) then inter:=3 else
                inter:=0;
end;


function arieint(var x1,y1,x2,y2,x3,y3,x4,y4:longint):longint;
var x:byte;
begin
     x:=inter(x1,y1,x2,y2,x3,y3,x4,y4);
     case x of
        1:arieint:=(x4-x1)*(y2-y3);
        2:arieint:=(x4-x1)*(y4-y1);
        3:arieint:=(x2-x3)*(y4-y1);
        4:arieint:=(y2-y3)*(x2-x3);
        5:
                if (x1>=x3)and(x2<=x4)and(y1>=y3)and(y2<=y4) then
                        arieint:=arie(x1,y1,x2,y2) else
                        arieint:=arie(x3,y3,x4,y4);
        0:arieint:=0;
     end;
end;



function perint(var x1,y1,x2,y2,x3,y3,x4,y4:longint):longint;
var x:byte;
begin
        x:=inter(x1,y1,x2,y2,x3,y3,x4,y4);
        case x of
                1:perint:=2*(x4-x1+y2-y3);
                2:perint:=2*(x4-x1+y4-y1);
                3:perint:=2*(x2-x3+y4-y1);
                4:perint:=2*(y2-y3+x2-x3);
                5:
                        if (x1>=x3)and(x2<=x4)and(y1>=y3)and(y2<=y4) then
                                perint:=per(x1,y1,x2,y2) else
                                perint:=per(x3,y3,x4,y4);
                0:perint:=0;
        end;
end;




procedure calccoordaux;
var x:byte;
begin
        x:=inter(x1,y1,x2,y2,x3,y3,x4,y4);
        case x of
                1:
                        begin
                                ax1:=x1;
                                ay1:=y3;
                                ax2:=x4;
                                ay2:=y2;
                        end;
                2:
                        begin
                                ax1:=x1;
                                ay1:=y1;
                                ax2:=x4;
                                ay2:=y4;
                        end;
                3:
                        begin
                                ax1:=x3;
                                ay1:=y1;
                                ax2:=x2;
                                ay2:=y4;
                        end;
                4:
                        begin
                                ax1:=x3;
                                ay1:=y3;
                                ax2:=x2;
                                ay2:=y3
                        end;
                5:
                        if (x1>=x3)and(x2<=x4)and(y1>=y3)and(y2<=y4) then
                                begin
                                        ax1:=x1;
                                        ay1:=y1;
                                        ax2:=x2;
                                        ay2:=y2;
                                end else
                                begin
                                        ax1:=x3;
                                        ay1:=y3;
                                        ax2:=x4;
                                        ay2:=y4;
                                end;
                0:
                        begin
                                ax1:=0;
                                ay1:=0;
                                ax2:=0;
                                ay2:=0;
                        end;
        end;
end;


begin
        init;
        calccoordaux;
        atotal:=arie(x1,y1,x2,y2)+arie(x3,y3,x4,y4)+arie(x5,y5,x6,y6);
        atotal:=atotal-arieint(x1,y1,x2,y2,x3,y3,x4,y4);
        atotal:=atotal-arieint(x1,y1,x2,y2,x5,y5,x6,y6);
        atotal:=atotal-arieint(x3,y3,x4,y4,x5,y5,x6,y6);
        atotal:=atotal+arieint(ax1,ay1,ax2,ay2,x5,y5,x6,y6);
        pertotal:=per(x1,y1,x2,y2)+per(x3,y3,x4,y4)+per(x5,y5,x6,y6);
        pertotal:=pertotal-perint(x1,y1,x2,y2,x3,y3,x4,y4);
        pertotal:=pertotal-perint(x1,y1,x2,y2,x5,y5,x6,y6);
        pertotal:=pertotal-perint(x3,y3,x4,y4,x5,y5,x6,y6);
        pertotal:=pertotal+perint(ax1,ay1,ax2,ay2,x5,y5,x6,y6);
        writeln(g,atotal,pertotal);
        close(g);
end.