Cod sursa(job #68843)

Utilizator DastasIonescu Vlad Dastas Data 29 iunie 2007 17:26:25
Problema Reuniune Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.35 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;
}