Cod sursa(job #2811604)

Utilizator IoanMihaiIoan Mihai IoanMihai Data 2 decembrie 2021 18:23:04
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
struct interval{
    long long x1,y1,x2,y2;
}a[3];
int n, m;
long long arie_sol, perimetru_sol;
long long arie(interval d)
{
    return (d.y2 - d.y1) * (d.x2 - d.x1);
}
long long perimetru(interval d)
{
    return 2 * (d.y2 - d.y1 + d.x2 - d.x1);
}
interval intersectie(interval x, interval y)
{
    interval solutie;
    solutie.x1 = max(x.x1, y.x1);
    solutie.y1 = max(y.y1, x.y1);
    solutie.x2 = min(x.x2, y.x2);
    solutie.y2 = min(x.y2, y.y2);

    if (solutie.x1 > solutie.x2 || solutie.y1 > solutie.y2)
        solutie.x1 = solutie.x2 = solutie.y1 = solutie.y2 = 0;
    return solutie;
}
int main() {
    for (int i=0;i<3;i++){
        fin >> a[i].x1 >> a[i].y1 >> a[i].x2 >> a[i].y2;
    }
    arie_sol = arie(a[0]) + arie(a[1]) + arie(a[2]) -
            arie(intersectie(a[0], a[1])) -
            arie(intersectie(a[0], a[2])) -
            arie(intersectie(a[1], a[2])) +
            arie(intersectie(intersectie(a[0], a[1]), a[2]));

    perimetru_sol = perimetru(a[0]) + perimetru(a[1]) + perimetru(a[2]) -
            perimetru(intersectie(a[0], a[1])) -
            perimetru(intersectie(a[0], a[2])) -
            perimetru(intersectie(a[1], a[2])) +
            perimetru(intersectie(intersectie(a[0], a[1]), a[2]));

    fout << arie_sol << " " << perimetru_sol << '\n';
    return 0;
}