Cod sursa(job #563612)

Utilizator wamfeverDobos Ionut wamfever Data 25 martie 2011 16:31:35
Problema Reuniune Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<fstream>
#define max(a, b) a>b?a:b
#define min(a, b) a<b?a:b
using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
struct dreptunghi
{
   long long x0, y0, x1, y1;
}

void read(dreptunghi X)
{
    fin >> X.x0 >> X.x1 >> X.y0 >> X.y1;
}

long long S(dreptunghi X)
{
    return (max(X.x0, X.x1) - min(X.x0, X.x1))*(max(X.y0, X.y1) - min(X.y0, X.y1));
}

long long P(dreptunghi X)
{
    return  2*(max(X.x0, X.x1) - min(X.x0, X.x1)) + 2*(max(X.y0, X.y1) - min(X.y0, X.y1));
}

int main()
{
    dreptunghi A, B, C, AB, BC, CA, ABC;

    read(A);
    read(B);
    read(C);

    AB.x0 = max(A.x0, B.x0);
    AB.x1 = max(A.x1, B.x1);
    AB.y0 = max(A.y0, B.y0);
    AB.y1 = max(A.y1, B.y1);

    BC.x0 = max(C.x0, B.x0);
    BC.x1 = max(C.x1, B.x1);
    BC.y0 = max(C.y0, B.y0);
    BC.y1 = max(C.y1, B.y1);

    CA.x0 = max(A.x0, C.x0);
    CA.x1 = max(A.x1, C.x1);
    CA.y0 = max(A.y0, C.y0);
    CA.y1 = max(A.y1, C.y1);

    ABC.x0 = max(CA.x0, B.x0);
    ABC.x1 = max(CA.x1, B.x1);
    ABC.y0 = max(CA.y0, B.y0);
    ABC.y1 = max(CA.y1, B.y1);

    long long Arie, Perimetru;

    Arie = S(A) + S(B) + S(C) - S(AB) - S(BC) - S(CA) + S(ABC);
    Perimetru = P(A) + P(B) + P(C) - P(AB) - P(BC) - P(CA) + P(ABC);

    fout << Arie << " " << Perimetru << "\n";

    return 0;
}