Cod sursa(job #1226693)

Utilizator rangerChihai Mihai ranger Data 6 septembrie 2014 19:20:12
Problema Reuniune Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.91 kb
#include<cstdio>
#include<algorithm>
using namespace std;

#define ll long long

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

    ll x1A, x1B, x1C, y1A, y1B, y1C, x2A, x2B, x2C, y2A, y2B, y2C;

    scanf("%lld%lld%lld%lld", &x1A, &y1A, &x2A, &y2A);
    scanf("%lld%lld%lld%lld", &x1B, &y1B, &x2B, &y2B);
    scanf("%lld%lld%lld%lld", &x1C, &y1C, &x2C, &y2C);


    ll Aria = (x2A - x1A)*(y2A - y1A) + (x2B - x1B)*(y2B - y1B) + (x2C - x1C)*(y2C - y1C);
    ll Perimetru = (x2A - x1A) + (y2A - y1A) + (x2B - x1B) + (y2B - y1B) + (x2C - x1C) + (y2C - y1C);
    Perimetru *= 2;

    if (x2A == x1A) Perimetru -= y2A - y1A;
    if (y2A == y1A) Perimetru -= x2A - x1A;
    if (x2B == x1B) Perimetru -= y2B - y1B;
    if (y2B == y1B) Perimetru -= x2B - x1B;
    if (x2C == x1C) Perimetru -= y2C - y1C;
    if (y2C == y1C) Perimetru -= x2C - x1C;

    ll x1, y1, x2, y2;
    x1 = max(x1A, x1B);
    y1 = max(y1A, y1B);
    x2 = min(x2A, x2B);
    y2 = min(y2A, y2B);
    if (x1 <= x2 && y1 <= y2) {
        Aria -= (y2 - y1) * (x2 - x1);
        Perimetru -=  2 * ( (x2 - x1) +  (y2 - y1) );
    }

    x1 = max(x1A, x1C);
    y1 = max(y1A, y1C);
    x2 = min(x2A, x2C);
    y2 = min(y2A, y2C);
    if (x1 <= x2 && y1 <= y2) {
        Aria -= (y2 - y1) * (x2 - x1);
        Perimetru -=  2 * ( (x2 - x1) +  (y2 - y1) );
    }

    x1 = max(x1C, x1B);
    y1 = max(y1C, y1B);
    x2 = min(x2C, x2B);
    y2 = min(y2C, y2B);
    if (x1 <= x2 && y1 <= y2) {
        Aria -= (y2 - y1) * (x2 - x1);
        Perimetru -=  2 * ( (x2 - x1) +  (y2 - y1) );
    }
    x1 = max(x1A, max(x1B, x1C));
    y1 = max(y1A, max(y1B, y1C));
    x2 = min(x2A, min(x2B, x2C));
    y2 = min(y2A, min(y2B, y2C)); {
        Aria += (y2 - y1) * (x2 - x1);
        Perimetru +=  2 * ( (x2 - x1) +  (y2 - y1) );
    }

    printf("%lld %lld", Aria, Perimetru);
    return 0;
}