Cod sursa(job #3217726)

Utilizator andreifilimonPopescu Filimon Andrei Cosmin andreifilimon Data 24 martie 2024 14:20:52
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>

using namespace std;

ifstream cin("reuniune.in");
ofstream cout("reuniune.out");

struct coord {
    int x1, y1, x2, y2;
} a, b, c, ab, bc, ca, abc;

long long arie(coord& dr) {
    return (1LL)*(dr.x2-dr.x1)*(dr.y2-dr.y1);
}

long long perimetru(coord& dr) {
    return (1LL)*2*((dr.x2-dr.x1)+(dr.y2-dr.y1));
}

coord inter(coord& x, coord& y) {
    if(max(x.x1, y.x1)>min(x.x2, y.x2) || max(x.y1, y.y1)>min(x.y2, y.y2))
        return {0, 0, 0, 0};
    return {max(x.x1, y.x1), max(x.y1, y.y1), min(x.x2, y.x2), min(x.y2, y.y2)};
}

int main() {
    cin>>a.x1>>a.y1>>a.x2>>a.y2;
    cin>>b.x1>>b.y1>>b.x2>>b.y2;
    cin>>c.x1>>c.y1>>c.x2>>c.y2;
    ab=inter(a, b);
    bc=inter(b, c);
    ca=inter(c, a);
    abc=inter(ab, c);
    cout<<arie(a)+arie(b)+arie(c)-arie(ab)-arie(bc)-arie(ca)+arie(abc)<<" ";
    cout<<perimetru(a)+perimetru(b)+perimetru(c)-perimetru(ab)-perimetru(bc)-perimetru(ca)+perimetru(abc);
}