Cod sursa(job #3133586)

Utilizator adela15alexandra adela adela15 Data 26 mai 2023 10:42:52
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <iostream>
#include <fstream>
using namespace std;

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

struct dreptunghi {
    int x0, y0, x1, y1;
};

inline long long int arie(dreptunghi d) {
    return 1LL*(d.x1-d.x0)*(d.y1-d.y0);
}

inline long long int perimetru(dreptunghi d) {
    return 2LL*(d.x1-d.x0)+2LL*(d.y1-d.y0);
}

dreptunghi intersectie(const dreptunghi &d1, const dreptunghi &d2) {
    dreptunghi d;
    d.x0=max(d1.x0,d2.x0);
    d.y0=max(d1.y0,d2.y0);
    d.x1=min(d1.x1,d2.x1);
    d.y1=min(d1.y1,d2.y1);
    if(d.x0>d.x1 || d.y0>d.y1) {
        d.x0=d.x1=0;
        d.y0=d.y1=0;
    }
    return d;
}

int main() {
    dreptunghi D[3];
    long long int A=0,P=0;
    dreptunghi dd;
    for(int i=0; i<3; i++) {
        in>>D[i].x0>>D[i].y0>>D[i].x1>>D[i].y1;
        A+=arie(D[i]);
        P+=perimetru(D[i]);
    }
    for(int i=0; i<2; i++)
        for (int j=i+1; j<3; j++) {
            dd=intersectie(D[i],D[j]);
            A-=arie(dd);
            P-=perimetru(dd);
        }
    dd=intersectie(intersectie(D[0],D[1]),D[2]);
    A+=arie(dd);
    P+=perimetru(dd);
    out<<A<<' '<<P;
    return 0;
}