Cod sursa(job #1001818)

Utilizator mvcl3Marian Iacob mvcl3 Data 26 septembrie 2013 10:51:32
Problema Reuniune Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#define IN "reuniune.in"
#define OUT "reuniune.out"
#define LL long long

std :: ifstream f(IN);
std :: ofstream g(OUT);

LL P, Aria;

struct DREPTUNGHI
{
    LL X0, X1, Y0, Y1;
}   A, B, C;

inline LL PERIMETRU(DREPTUNGHI punct)
{
    return 2 * (punct.X1 - punct.X0 + punct.Y1 - punct.Y0);
}

inline LL ARIA(DREPTUNGHI punct)
{
    return (punct.X1 - punct.X0) * (punct.Y1 - punct.Y0);
}

inline DREPTUNGHI LLERSECTIE(DREPTUNGHI a, DREPTUNGHI b)
{
    DREPTUNGHI poLL;
    poLL.X0 = std :: max(a.X0, b.X0);
    poLL.X1 = std :: min(a.X1, b.X1);
    poLL.Y0 = std :: max(a.Y0, b.Y0);
    poLL.Y1 = std :: min(a.Y1, b.Y1);

    return poLL;
}

int main()
{
    f >> A.X0 >> A.Y0 >> A.X1 >> A.Y1;
    f >> B.X0 >> B.Y0 >> B.X1 >> B.Y1;
    f >> C.X0 >> C.Y0 >> C.X1 >> C.Y1;
    Aria = ARIA(A) + ARIA(B) + ARIA(C) - ARIA(LLERSECTIE(A, B)) - ARIA(LLERSECTIE(A, C)) -
           ARIA(LLERSECTIE(B, C)) + ARIA(LLERSECTIE(LLERSECTIE(A, B), C));

    P = PERIMETRU(A) + PERIMETRU(B) + PERIMETRU(C) - PERIMETRU(LLERSECTIE(A, B)) -
        PERIMETRU(LLERSECTIE(A, C)) - PERIMETRU(LLERSECTIE(B, C)) + PERIMETRU(LLERSECTIE(LLERSECTIE(A, B), C));

    g << Aria << ' ' << P << '\n';
    g.close();
    return 0;
}