Cod sursa(job #886694)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 23 februarie 2013 10:01:56
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <fstream>
#include <stdio.h>
#include <assert.h>
using namespace std;

const int OO = (1 << 31) - 1;
struct dreptunghi { int xs, xd, yj, ys; } D[5];
long long A, P;

void cit ()
{
    for (int i = 0; i < 3; i++)
    {
        scanf ("%d%d%d%d", &D[i].xs, &D[i].yj, &D[i].xd, &D[i].ys);
    }
}

void rez ()
{
    int i, b, nr;
    long long dA, dP;

    for (i = 1; i < (1 << 3); i++)
    {
        nr = 0;
        D[3].xs = D[3].yj = -OO;
        D[3].xd = D[3].ys =  OO;

        for (b = 0; b < 3; b++)
        {
            if ((i >> b) & 1)
            {
                nr ++;

                D[3].xs = max (D[3].xs, D[b].xs);
                D[3].yj = max (D[3].yj, D[b].yj);

                D[3].xd = min (D[3].xd, D[b].xd);
                D[3].ys = min (D[3].ys, D[b].ys);
            }
        }

        if (D[3].xs > D[3].xd || D[3].yj > D[3].ys)
        {
            dA = 0;
            dP = 0;
        }
        else
        {
            dA = (long long)(D[3].xd - D[3].xs) * (D[3].ys - D[3].yj);
            dP = ((long long)(D[3].xd - D[3].xs) + (D[3].ys - D[3].yj)) << 1;

            if ((nr & 1) == 0)
            {
                dA = -dA;
                dP = -dP;
            }
        }

        A += dA;
        P += dP;
    }
}

void afi ()
{
    printf ("%lld ", A);
    printf ("%lld ", P);
}

int main ()
{
    freopen ("reuniune.in", "r", stdin);
    freopen ("reuniune.out", "w", stdout);

    cit ();
    rez ();
    afi ();

    return 0;
}