Cod sursa(job #2475018)

Utilizator mirceatlxhaha haha mirceatlx Data 16 octombrie 2019 02:17:54
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
#include <algorithm>
#define input "reuniune.in"
#define output "reuniune.out"
using namespace std;

ifstream fin(input);
ofstream fout(output);

struct dreptunghi
{
    int X1,Y1,X2,Y2;
};

dreptunghi dr[3];

long long Arie(dreptunghi a)
{
    return 1LL * (a.X2 - a.X1) * (a.Y2 - a.Y1);
}

long long Perimetru(dreptunghi a)
{
    return 1LL * 2 * (a.X2 - a.X1) + 1LL * 2 * (a.Y2 - a.Y1);
}

dreptunghi intersectie(dreptunghi a, dreptunghi b)
{
    dreptunghi temp;
    temp.X1 = max(a.X1,b.X1);
    temp.Y1 = max(a.Y1,b.Y1);
    temp.X2 = min(a.X2,b.X2);
    temp.Y2 = min(a.Y2,b.Y2);
    if(temp.X1 > temp.X2 || temp.Y1 > temp.Y2)
    {
        temp.X1 = temp.X2 = temp.Y1 = temp.Y2 = 0;
    }

    return temp;
}

int main()
{
    long long A, P;
    A = P = 0;
    for(int i = 0 ; i < 3; i++)
    {
        fin >> dr[i].X1 >> dr[i].Y1 >> dr[i].X2 >> dr[i].Y2;
        A += Arie(dr[i]);
        P += Perimetru(dr[i]);
    }
    dreptunghi temp;
    for(int i = 0 ; i < 2; i++)
        for(int j = i + 1; j < 3; j++)
    {
        temp = intersectie(dr[i],dr[j]);
        A -= Arie(temp);
        P -= Perimetru(temp);
    }
    temp = intersectie(intersectie(dr[0],dr[1]),dr[2]);
    A += Arie(temp);
    P += Perimetru(temp);
    fout << A << " " << P;
    return 0;
}