Cod sursa(job #2803328)

Utilizator Maftei_TudorMaftei Tudor Maftei_Tudor Data 19 noiembrie 2021 20:12:24
Problema Reuniune Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.51 kb
#include <cstdio>

#include <fstream>

//FILE *in = fopen("reuniune.in","r"), *out = fopen("reuniune.out","w");



using namespace std;



ifstream in("reuniune.in");

ofstream out("reuniune.out");



struct dreptunghi

{

    long long x0, y0, x1, y1;

};



dreptunghi A, B, C;



int intersect(dreptunghi x, dreptunghi y)

{

    if ( (x.x1 < y.x0 && x.y1 < y.y0) || (y.x1 < x.x0 && y.y1 < x.y0) )

        return 0;



    return 1;

}



long long arie(dreptunghi x)

{

    return (x.x1 - x.x0) * (x.y1 - x.y0);

}



long long perim(dreptunghi x)

{

    return 2*(x.x1 - x.x0) + 2*(x.y1 - x.y0);

}



int main()

{

//    fscanf(in, "%lld %lld %lld %lld", &A.x0, &A.y0, &A.x1, &A.y1);

//    fscanf(in, "%lld %lld %lld %lld", &B.x0, &B.y0, &B.x1, &B.y1);

//    fscanf(in, "%lld %lld %lld %lld", &C.x0, &C.y0, &C.x1, &C.y1);



    in >> A.x0 >> A.y0 >> A.x1 >> A.y1;

    in >> B.x0 >> B.y0 >> B.x1 >> B.y1;

    in >> C.x0 >> C.y0 >> C.x1 >> C.y1;



    dreptunghi AxB, BxC, AxC, AxBxC;



    AxB.x0 = A.x0 > B.x0 ? A.x0 : B.x0;

    AxB.y0 = A.y0 > B.y0 ? A.y0 : B.y0;

    AxB.x1 = A.x1 < B.x1 ? A.x1 : B.x1;

    AxB.y1 = A.y1 < B.y1 ? A.y1 : B.y1;



    BxC.x0 = B.x0 > C.x0 ? B.x0 : C.x0;

    BxC.y0 = B.y0 > C.y0 ? B.y0 : C.y0;

    BxC.x1 = B.x1 < C.x1 ? B.x1 : C.x1;

    BxC.y1 = B.y1 < C.y1 ? B.y1 : C.y1;



    AxC.x0 = A.x0 > C.x0 ? A.x0 : C.x0;

    AxC.y0 = A.y0 > C.y0 ? A.y0 : C.y0;

    AxC.x1 = A.x1 < C.x1 ? A.x1 : C.x1;

    AxC.y1 = A.y1 < C.y1 ? A.y1 : C.y1;



    AxBxC.x0 = AxB.x0 > C.x0 ? AxB.x0 : C.x0;

    AxBxC.y0 = AxB.y0 > C.y0 ? AxB.y0 : C.y0;

    AxBxC.x1 = AxB.x1 < C.x1 ? AxB.x1 : C.x1;

    AxBxC.y1 = AxB.y1 < C.y1 ? AxB.y1 : C.y1;



    long long arieAxB = 0, arieBxC = 0, arieAxC = 0, arieAxBxC = 0;

    long long perimAxB = 0, perimBxC = 0, perimAxC = 0, perimAxBxC = 0;



    if ( intersect(A, B) )

        arieAxB = arie(AxB), perimAxB = perim(AxB);

    if ( intersect(B, C) )

        arieBxC = arie(BxC), perimBxC = perim(BxC);

    if ( intersect(A, C) )

        arieAxC = arie(AxC), perimAxC = perim(AxC);

    if ( intersect(A, B) && intersect(A, C) && intersect(B, C) )

        arieAxBxC = arie(AxBxC), perimAxBxC = perim(AxBxC);



    out << arie(A) + arie(B) + arie(C) - arieAxB - arieBxC - arieAxC + arieAxBxC << " ";

    out << perim(A) + perim(B) + perim(C) - perimAxB - perimBxC - perimAxC + perimAxBxC << "\n";



	return 0;

}