Cod sursa(job #2172799)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 15 martie 2018 17:58:33
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <fstream>
#include <cmath>
#define LL long long

using namespace std;

ifstream f("reuniune.in");
ofstream g("reuniune.out");

struct rectangle {
    LL x, y, x2, y2;
};
rectangle a, b, c;
LL sum;

LL area(rectangle b) {
    return abs(b.x2-b.x)*abs(b.y2-b.y);
}

LL peri(rectangle b) {
    return 2*(abs(b.x2-b.x)+abs(b.y2-b.y));
}

bool intersectable(rectangle a, rectangle b) {
    if ( min(a.y2, b.y2) < max(a.y,b.y) ||
         min(a.x2, b.x2) < max(a.x,b.x) )
            return 0;
    return 1;
}

rectangle join(rectangle a, rectangle b) {
    if (intersectable(a,b) == 0)
        return {0,0,0,0};
    LL x, y, x2, y2;
    y2 = min(a.y2, b.y2);
     y = max(a.y , b.y );
    x2 = min(a.x2, b.x2);
     x = max(a.x , b.x );
    return {x,y,x2,y2};
}

rectangle join3(rectangle a, rectangle b, rectangle c) {
    if (intersectable(a,b) == 0 ||
        intersectable(c,b) == 0 ||
        intersectable(a,c) == 0)
        return {0,0,0,0};
    LL x, y, x2, y2;
    y2 = min(c.y2, min(a.y2, b.y2));
     y = max(a.y,  max(a.y , b.y ));
    x2 = min(c.x2, min(a.x2, b.x2));
     x = max(c.x,  max(a.x , b.x ));
    return {x,y,x2,y2};
}


void read(rectangle &a) {
    f >> a.x >> a.y >> a.x2 >> a.y2;
}

int main() {
    read(a); read(b); read(c);
    g << (area(a)+area(b)+area(c)) - ( area( join(a,b) )+area( join(a,c) )+area( join(b,c) ) ) + area( join3(a,b,c) ) << ' ';
    g << (peri(a)+peri(b)+peri(c)) - ( peri( join(a,b) )+peri( join(a,c) )+peri( join(b,c) ) ) + peri( join3(a,b,c) );
}