Cod sursa(job #1404490)

Utilizator ThomasFMI Suditu Thomas Thomas Data 28 martie 2015 11:59:13
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <fstream>
using namespace std;

ifstream f("reuniune.in");
ofstream g("reuniune.out");

int x1,x2,y1,y2;
struct elem
{
    long long x1,x2,y1,y2;
}a[5];
long long A,P,xst,xdr,ysus,yjos;
int main ()
{
    int i;

    for(i=1;i<=3;++i)
    {
        f>>x1>>y1>>x2>>y2;
        a[i].x1=min(x1,x2);
        a[i].y1=max(y1,y2);
        a[i].x2=max(x1,x2);
        a[i].y2=min(y1,y2);
        P+=2*(a[i].x2-a[i].x1)+2*(a[i].y1-a[i].y2);
        A+=(a[i].x2-a[i].x1)*(a[i].y1-a[i].y2);
    }

    xst=max(a[1].x1,a[2].x1);
    xdr=min(a[1].x2,a[2].x2);
    ysus=min(a[1].y1,a[2].y1);
    yjos=max(a[1].y2,a[2].y2);

    if (xst<=xdr && yjos<=ysus)
    {
        P=P-2*(xdr-xst)-2*(ysus-yjos);
        A=A-(xdr-xst)*(ysus-yjos);
    }

    xst=max(xst,a[3].x1);
    xdr=min(xdr,a[3].x2);
    ysus=min(ysus,a[3].y1);
    yjos=max(yjos,a[2].y2);

    if (xst<=xdr && yjos<=ysus)
    {
        P=P+2*(xdr-xst)+2*(ysus-yjos);
        A=A+(xdr-xst)*(ysus-yjos);
    }

    xst=max(a[1].x1,a[3].x1);
    xdr=min(a[1].x2,a[3].x2);
    ysus=min(a[1].y1,a[3].y1);
    yjos=max(a[1].y2,a[3].y2);

    if (xst<=xdr && yjos<=ysus)
    {
        P=P-2*(xdr-xst)-2*(ysus-yjos);
        A=A-(xdr-xst)*(ysus-yjos);
    }

    xst=max(a[2].x1,a[3].x1);
    xdr=min(a[2].x2,a[3].x2);
    ysus=min(a[2].y1,a[3].y1);
    yjos=max(a[2].y2,a[3].y2);

    if (xst<=xdr && yjos<=ysus)
    {
        P=P-2*(xdr-xst)-2*(ysus-yjos);
        A=A-(xdr-xst)*(ysus-yjos);
    }

    g<<A<<" "<<P<<"\n";

    f.close();
    g.close();
    return 0;
}