Cod sursa(job #2195170)

Utilizator Valeriu285Vlad Valeriu Valeriu285 Data 15 aprilie 2018 15:18:55
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("reuniune.in");
ofstream g("reuniune.out");
struct dreptunghi
{
    int x1, y1, x2, y2; //x1<=x2, y1<=y2
};
long long aria(dreptunghi d)
{
    return 1LL * (d.x2 - d.x1) * (d.y2 - d.y1);
}
long long perimetru(dreptunghi d)
{
    return 2LL * (d.x2 - d.x1 + d.y2 - d.y1);
}
dreptunghi intersectie(dreptunghi d1, dreptunghi d2)
{
    dreptunghi d;
    d.x1 = max(d1.x1, d2.x1);
    d.y1 = max(d1.y1, d2.y1);
    d.x2 = min(d1.x2, d2.x2);
    d.y2 = min(d1.y2, d2.y2);
    if(d.x1 > d.x2 || d.y1 > d.y2)
        {
            d.x1 = d.x2 = 0; //intersectie vida (dreptunghi vid)
            d.y1 = d.y2 = 0;
        }
    return d;
}
int main()
{
    dreptunghi d1, d2, d3;
    f >> d1.x1 >> d1.y1 >> d1.x2 >> d1.y2;
    f >> d2.x1 >> d2.y1 >> d2.x2 >> d2.y2;
    f >> d3.x1 >> d3.y1 >> d3.x2 >> d3.y2;
    long long a = 0, p = 0;
    a = aria(d1) + aria(d2) + aria(d3) - aria(intersectie(d1, d2)) - aria(intersectie(d2, d3)) - aria(intersectie(d1, d3));
    a += aria(intersectie(d1, intersectie(d2, d3)));
    p = perimetru(d1) + perimetru(d2) + perimetru(d3) - perimetru(intersectie(d1, d2)) - perimetru(intersectie(d2, d3)) - perimetru(intersectie(d1, d3));
    p += perimetru(intersectie(d1, intersectie(d2, d3)));
    g<<a<<' '<<p;
    return 0;
}