Cod sursa(job #998060)

Utilizator poptibiPop Tiberiu poptibi Data 15 septembrie 2013 17:03:25
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <algorithm>
using namespace std;

struct R
{
    long long X1, X2, Y1, Y2;
}D[4];

long long A(R A)
{
    return (A.X2 - A.X1) * (A.Y2 - A.Y1);
}

long long P(R A)
{
    return 2 * (A.X2 - A.X1 + A.Y2 - A.Y1);
}

R I(R A, R B)
{
    R C;
    C.X1 = max(A.X1, B.X1);
    C.X2 = min(A.X2, B.X2);
    C.Y1 = max(A.Y1, B.Y1);
    C.Y2 = min(A.Y2, B.Y2);
    if(C.X1 > C.X2 || C.Y1 > C.Y2) C.X1 = C.X2 = C.Y1 = C.Y2 = 0;
    return C;
}

int main()
{
    ifstream fin("reuniune.in");
    ofstream fout("reuniune.out");

    for(int i = 1; i <= 3; ++ i)
        fin >> D[i].X1 >> D[i].Y1 >> D[i].X2 >> D[i].Y2;

    fout << A(D[1]) + A(D[2]) + A(D[3]) - A( I(D[1], D[2]) ) - A( I(D[2], D[3]) ) - A( I(D[1], D[3]) ) + A( I(D[1], I(D[2], D[3])) ) << " ";
    fout << P(D[1]) + P(D[2]) + P(D[3]) - P( I(D[1], D[2]) ) - P( I(D[2], D[3]) ) - P( I(D[1], D[3]) ) + P( I(D[1], I(D[2], D[3])) ) << "\n";

    return 0;
}