Cod sursa(job #3309110)

Utilizator popuPop Matei Tudor popu Data 1 septembrie 2025 13:06:56
Problema Reuniune Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.17 kb
#include <bits/stdc++.h>

#define f first
#define s second
#define ll long long

using namespace std;

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

struct Point
{
    ll i, j;

    Point(){}

    Point(ll i, ll j)
    {
        this-> i = i;
        this-> j = j;
    }
};

Point min(Point a, Point b)
{
    return {min(a.i, b.i), min(a.j, b.j)};
}

Point max(Point a, Point b)
{
    return {max(a.i, b.i), max(a.j, b.j)};
}

struct Figure
{
    Point l, r;

    Figure(){}

    Figure(Point l, Point r)
    {
        this-> l = l;
        this-> r = r;
    }

    ll getA()
    {
        return max(0ll, r.i - l.i) * max(0ll, r.j - l.j);
    }

    ll getP()
    {
        if(l.i > r.i || l.j > r.j)
            return 0;
        return 2 * (r.i - l.i + r.j - l.j);
    }
};

Figure a, b, c;
Figure ab, ac, bc;
Figure abc;

void read()
{
    Point auxl, auxr;

    fin >> auxl.j >> auxl.i >> auxr.j >> auxr.i;
    a = Figure(auxl, auxr);

    fin >> auxl.j >> auxl.i >> auxr.j >> auxr.i;
    b = Figure(auxl, auxr);

    fin >> auxl.j >> auxl.i >> auxr.j >> auxr.i;
    c = Figure(auxl, auxr);
}

void processRectangles()
{
    Point auxl, auxr;

    auxl = max(a.l, b.l);
    auxr = min(a.r, b.r);
    ab = Figure(auxl, auxr);

    auxl = max(a.l, c.l);
    auxr = min(a.r, c.r);
    ac = Figure(auxl, auxr);

    auxl = max(b.l, c.l);
    auxr = min(b.r, c.r);
    bc = Figure(auxl, auxr);

    auxl = max(max(a.l, b.l), c.l);
    auxr = min(min(a.r, b.r), c.r);
    abc = Figure(auxl, auxr);
}

void solve()
{
    ll bigA = a.getA() + b.getA() + c.getA();
    ll medA = ab.getA() + bc.getA() + ac.getA();
    ll smallA = abc.getA();
    fout << bigA - medA + smallA << '\n';

    ll bigP = a.getP() + b.getP() + c.getP();
    ll medP = ab.getP() + bc.getP() + ac.getP();
    ll smallP = abc.getP();
    fout << bigP - medP + smallP << '\n';
}

int main()
{
    read();
    cout << a.getA() << ' ' << b.getA() << ' ' << c.getA() << '\n';
    processRectangles();
    cout << ab.getA() << ' ' << bc.getA() << ' ' << ac.getA() << ' ' << abc.getA() << '\n';
    solve();

    return 0;
}