Cod sursa(job #896825)

Utilizator sebii_cSebastian Claici sebii_c Data 27 februarie 2013 17:30:05
Problema Reuniune Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <cstdio>

#include <algorithm>

using namespace std;

struct rect {
    long long x1, y1;
    long long x2, y2;

    rect() {}
    rect(long long _x1, long long _y1, long long _x2, long long _y2):
        x1(_x1), y1(_y1), x2(_x2), y2(_y2) {}
};

void swap(rect& a, rect& b)
{
    rect c(a.x1, a.y1, a.x2, b.y2);
    a = b;
    b = c;
}

long long area(rect a)
{
    return (a.x2 - a.x1) * (a.y2 - a.y1);
}

long long perimeter(rect a)
{
    return 2 * (a.x2 - a.x1) + 2 * (a.y2 - a.y1);
}

rect intersect(rect a, rect b)
{
    rect c(max(a.x1, b.x1), max(a.y1, b.y1), 
           min(a.x2, b.x2), min(a.y2, b.y2));

    return c;
}

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

    long long x1, y1, x2, y2;
    rect r[3];
    for (int i = 0; i < 3; ++i) {
        scanf("%lld %lld %lld %lld", &x1, &y1, &x2, &y2);
        r[i] = rect(x1, y1, x2, y2);
    }

    long long a = area(r[0]) + area(r[1]) + area(r[2]) -
        area(intersect(r[0], r[1])) - area(intersect(r[1], r[2])) -
        area(intersect(r[0], r[2]));
    a += area(intersect(r[0], intersect(r[1], r[2])));

    long long p = perimeter(r[0]) + perimeter(r[1]) + perimeter(r[2]) -
        perimeter(intersect(r[0], r[1])) - perimeter(intersect(r[1], r[2])) -
        perimeter(intersect(r[0], r[2]));
    p += perimeter(intersect(r[0], intersect(r[1], r[2])));

    printf("%lld %lld\n", a, p);

    return 0;
}