Cod sursa(job #2977805)

Utilizator gabriel10tm@gmail.comGabriel Marian [email protected] Data 12 februarie 2023 14:27:52
Problema Reuniune Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <bits/stdc++.h>
using namespace std;
#define ll long long
typedef array<ll,2> P;
typedef array<ll,4> R;
#if 1
#define cin fin
#define cout fout
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
#endif // 0
R rec[3];
array<P,4> getPts(R r){
    return {P{r[0],r[1]},P{r[2],r[3]},P{r[0],r[3]},P{r[2],r[1]}};
}
ll area(R r){
    return abs(r[2]-r[0])*abs(r[3]-r[1]);
}
ll peri(R r){
    return 2*(abs(r[2]-r[0])+abs(r[3]-r[1]));
}
R rect(P p0,P p1){
    return {min(p0[0],p1[0]),min(p0[1],p1[1]),max(p0[0],p1[0]),max(p0[1],p1[1])};
}
void print(R r){
    for(int i=0;i<4;i++)
        cout << r[i] << ",";
    cout << "\n";
}

R overlap(R r1,R r2){
    return {
        max(r1[0],r2[0]),
        max(r1[1],r2[1]),
        min(r1[2],r2[2]),
        min(r1[3],r2[3])
    };
}
int main(){
    for(int i=0;i<3;i++){
        cin >> rec[i][0] >> rec[i][1] >> rec[i][2] >> rec[i][3];
    }
    R r01 = overlap(rec[0],rec[1]), r12 = overlap(rec[1],rec[2]), r02 = overlap(rec[2],rec[0]);
    R r012 = overlap(r01,rec[2]);
    ll ta = area(rec[0]) + area(rec[1]) + area(rec[2]) - area(r01) - area(r12) - area(r02) + area(r012);
    ll tp = peri(rec[0]) + peri(rec[1]) + peri(rec[2]) - peri(r01) - peri(r12) - peri(r02) + peri(r012);
    cout << ta << " " << tp;
}