Cod sursa(job #1932346)

Utilizator 1475369147896537415369Andrei Udriste 1475369147896537415369 Data 19 martie 2017 17:59:49
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <cstdio>
#include <algorithm>
using namespace std;

struct rectangle{
    long long x0, y0,x1, y1;

    rectangle(){
        x0 = 0; y0 = 0; x1 = 0; y1 = 0;
    }
    rectangle(long long _x0, long long _y0, long long _x1, long long _y1){
        x0 = _x0; y0 = _y0; x1 = _x1; y1 = _y1;
    }
};
inline rectangle Intersection(const rectangle &R1, const rectangle &R2){

    long long x0, y0, x1, y1;

    x0 = max(R1.x0, R2.x0);
    y0 = max(R1.y0, R2.y0);
    x1 = min(R1.x1, R2.x1);
    y1 = min(R1.y1, R2.y1);

    return (x0 > x1 || y0 > y1) ? rectangle() : rectangle(x0, y0, x1, y1);
}
inline long long Area(const rectangle &R){
    return ((R.y1 - R.y0) * (R.x1 - R.x0));
}
inline long long Edge(const rectangle &R){
    return (((R.y1 - R.y0) + (R.x1 - R.x0)) * 2);
}

int main(){

    long long x0, y0, x1, y1, AreaABC, EdgeABC;
    rectangle A, B, C, AC, AB, CB, ABC;

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

    scanf("%lld %lld %lld %lld", &x0, &y0, &x1, &y1); A = rectangle(x0, y0, x1, y1);
    scanf("%lld %lld %lld %lld", &x0, &y0, &x1, &y1); B = rectangle(x0, y0, x1, y1);
    scanf("%lld %lld %lld %lld", &x0, &y0, &x1, &y1); C = rectangle(x0, y0, x1, y1);

    AC = Intersection(A, C);
    AB = Intersection(A, B);
    CB = Intersection(C, B);
    ABC = Intersection(AC, B);

    AreaABC = Area(A) + Area(B) + Area(C) - Area(AC) - Area(AB) - Area(CB) + Area(ABC);
    EdgeABC = Edge(A) + Edge(B) + Edge(C) - Edge(AC) - Edge(AB) - Edge(CB) + Edge(ABC);

    printf("%lld %lld", AreaABC, EdgeABC);

    return 0;
}