Cod sursa(job #2149419)

Utilizator lixiLixandru Andrei lixi Data 2 martie 2018 16:41:19
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("reuniune.in");
ofstream g("reuniune.out");

struct dreptunghi{int x0,y0,x1,y1;};

long long arie(dreptunghi d)
{
    return 1LL*(d.x1-d.x0)*(d.y1-d.y0);
}
long long perim(dreptunghi d)
{
    return 2LL*(d.x1-d.x0+d.y1-d.y0);
}
dreptunghi intersectie(dreptunghi d1,dreptunghi d2)
{
    dreptunghi d;
    d.x0=max(d1.x0,d2.x0);
    d.y0=max(d1.y0,d2.y0);
    d.x1=min(d1.x1,d2.x1);
    d.y1=min(d1.y1,d2.y1);
    if(d.x0>d.x1 || d.y0>d.y1)
    {
        d.x0=d.y0=0;         //intersectie vida
        d.x1=d.y1=0;
    }

    return d;
}

int main()
{
    dreptunghi D[3],dd;
    long long A=0,P=0;
    for(int i=0;i<3;i++)
        {f>>D[i].x0>>D[i].y0>>D[i].x1>>D[i].y1;
        A+=arie(D[i]);
        P+=perim(D[i]);
        }
        for(int i=0;i<2;i++)
            for(int j=i+1;j<3;j++)
        {
            dd=intersectie(D[i],D[j]);
            A-=arie(dd);
            P-=perim(dd);
        }
        dd=intersectie(intersectie(D[0],D[1]),D[2]);
        A+=arie(dd);
        P+=perim(dd);
        g<<A<<' '<<P;

    return 0;
}