Cod sursa(job #2585152)

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

using namespace std;

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

int arieTotal, perimetruTotal;

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

int getLen(int x, int y)
{
    if(x >= 0 && y >= 0)
        return y - x;
    if(x < 0 && y < 0)
        return x - y;

    return abs(x) + abs(y);
}

int Arie(hh a)
{
    int x1 = a.x1, x2 = a.x2;
    int y1 = a.y1, y2 = a.y2;

    int height = getLen(y1, y2);
    int length = getLen(x1, x2);

    return height * length;
}
int Perimetru(hh a)
{
    int x1 = a.x1, x2 = a.x2;
    int y1 = a.y1, y2 = a.y2;

    int height = getLen(y1, y2);
    int length = getLen(x1, x2);

    return 2 * (height + length);
}

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);
}

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;
}