Cod sursa(job #2977810)

Utilizator gabriel10tm@gmail.comGabriel Marian [email protected] Data 12 februarie 2023 14:34:27
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 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];
ll area(R r){
    return (r[2]-r[0])*(r[3]-r[1]);
}
ll peri(R r){
    return 2*(abs(r[2]-r[0])+abs(r[3]-r[1]));
}
R overlap(R r1,R r2){
    R r = {
        max(r1[0],r2[0]),
        max(r1[1],r2[1]),
        min(r1[2],r2[2]),
        min(r1[3],r2[3])
    };
    if(r[0] > r[2] || r[1] > r[3])
        return {0,0,0,0};
    return r;
}
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;
}