Cod sursa(job #2133307)

Utilizator topala.andreiTopala Andrei topala.andrei Data 16 februarie 2018 19:20:33
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("reuniune.in");
ofstream g("reuniune.out");
struct dreptunghi
{
    int x0, y0, x1, y1;
};
inline long long arie(dreptunghi D)
{
    return 1LL * (D.x1 - D.x0) * (D.y1 - D.y0);
}
inline long long perimetru(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.x1=min(D1.x1,D2.x1);

    D.y0=max(D1.y0,D2.y0);
    D.y1=min(D1.y1,D2.y1);

    if ((D.x0>D.x1) || (D.y0>D.y1)) //intersectie vida
    {
        D.x0=D.x1=D.y0=D.y1=0; //dreptunghi vid
    }
    return D;
}
int main()
{
    dreptunghi D[3],DD;
    long long Arie=0,Perimetru=0;
    for (int i=0;i<3;i++)
    {
        f>>D[i].x0>>D[i].y0>>D[i].x1>>D[i].y1;
        Arie+=arie(D[i]);
        Perimetru+=perimetru(D[i]);
    }
    for (int i=0;i<2;i++)
        for (int j=i+1;j<3;j++)
        {
            DD=intersectie(D[i],D[j]);
            Arie-=arie(DD);
            Perimetru-=perimetru(DD);
        }
    DD=intersectie(D[0],intersectie(D[1],D[2]));
    Arie+=arie(DD);
    Perimetru+=perimetru(DD);

    g<<Arie<<' '<<Perimetru;
    return 0;
}