Cod sursa(job #2585157)

Utilizator VladTZYVlad Tiganila VladTZY Data 18 martie 2020 18:16:00
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#include <stdlib.h>

using namespace std;

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

long long int arieTotal, perimetruTotal;

struct hh{
    int x1, y1;
    int x2, y2;
};
hh dr[5], rez;

long long int Arie(hh a)
{
    return 1ll * (a.x2 - a.x1) * (a.y2 -a.y1);
}
long long int Perimetru(hh a)
{
    return 1ll * 2 * (a.x2 - a.x1) + 1ll * 2 * (a.y2 - a.y1);
}

void getDreptunghi(hh a, hh b)
{
    rez.x1 = max(a.x1, b.x1);
    rez.x2 = min(a.x2, b.x2);

    rez.y1 = max(a.y1, b.y1);
    rez.y2 = min(a.y2, b.y2);

    if(rez.x1 > rez.x2 || rez.y1 > rez.y2)
        rez.x1 = 0, rez.x2 = 0, rez.y1 = 0, rez.y2 = 0;
}

int main()
{
    for(int i = 1; i <= 3; i++)
    {
        f >> dr[i].x1 >> dr[i].y1 >> dr[i].x2 >> dr[i].y2;

        arieTotal += Arie(dr[i]);
        perimetruTotal += Perimetru(dr[i]);
    }

    for(int i = 1; i <= 3; i++)
    {
        for(int j = i + 1; j <= 3; j++)
        {
            getDreptunghi(dr[i], dr[j]);

            arieTotal -= Arie(rez);
            perimetruTotal -= Perimetru(rez);
        }
    }

    getDreptunghi(dr[1], rez);
    arieTotal += Arie(rez);
    perimetruTotal += Perimetru(rez);

    g << arieTotal << " " << perimetruTotal << "\n";
    return 0;
}