Cod sursa(job #2435299)

Utilizator victorv88Veltan Victor victorv88 Data 3 iulie 2019 16:54:17
Problema Reuniune Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>
using namespace std;

struct drept{
    int x1, y1, x2, y2;
}d[4];

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

long long rez_arie, rez_perimetru;

drept reun(drept a, drept b)
{
    drept nou;
    nou.x1=max(a.x1,b.x1);
    nou.y1=max(a.y1,b.y1);
    nou.x2=min(a.x2,b.x2);
    nou.y2=min(a.y2,b.y2);
    return nou;
}

int main()
{
    for (int i=1; i<=3; ++i)
    {
        f >> d[i].x1 >> d[i].y1 >> d[i].x2 >> d[i].y2;
        rez_arie+=(d[i].x2-d[i].x1)*(d[i].y2-d[i].y1);
        rez_perimetru+=2*(d[i].x2-d[i].x1)+2*(d[i].y2-d[i].y1);
    }
    for (int i=1; i<=3; ++i)
    {
        for (int j=i+1; j<=3; ++j)
        {
            drept reuniune=reun(d[i],d[j]);
            rez_arie-=(reuniune.x2-reuniune.x1)*(reuniune.y2-reuniune.y1);
            rez_perimetru-=(2*(reuniune.x2-reuniune.x1)+2*(reuniune.y2-reuniune.y1));
        }
    }
    drept reuniune=reun(d[1],d[2]);
    drept alta=reun(reuniune,d[3]);
    rez_arie+=(alta.x2-alta.x1)*(alta.y2-alta.y1);
    rez_perimetru+=(2*(alta.x2-alta.x1)+2*(alta.y2-alta.y1));
    g << rez_arie <<' ' << rez_perimetru;
    return 0;
}