Cod sursa(job #1841041)

Utilizator zdavid112zIon David-Gabriel zdavid112z Data 5 ianuarie 2017 11:20:03
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>

using namespace std;

struct Drept
{
    int x0, y0, x1, y1;
    long long arie()
    {
        return ((long long)(x1 - x0)) * (y1 - y0);
    }
    long long perimetru()
    {
        return ((x1 - x0) + (y1 - y0)) * 2LL;
    }
};

Drept inter(Drept a, Drept b)
{
    Drept r;
    r.x0 = max(a.x0, b.x0);
    r.y0 = max(a.y0, b.y0);
    r.x1 = min(a.x1, b.x1);
    r.y1 = min(a.y1, b.y1);
    if(r.x0 > r.x1 || r.y0 > r.y1)
    {
        r.x0 = r.x1 = r.y0 = r.y1 = 0;
    }
    return r;
}

int main()
{
    long long ar, pr;
    Drept a, b, c, ab, bc, ac, abc;
    ifstream f("reuniune.in");
    ofstream g("reuniune.out");
    f >> a.x0 >> a.y0 >> a.x1 >> a.y1;
    f >> b.x0 >> b.y0 >> b.x1 >> b.y1;
    f >> c.x0 >> c.y0 >> c.x1 >> c.y1;
    ab = inter(a, b);
    ac = inter(a, c);
    bc = inter(b, c);
    abc = inter(ab, c);
    ar = a.arie() + b.arie() + c.arie() -
         ab.arie() - ac.arie() - bc.arie() +
         abc.arie();
    pr = a.perimetru() + b.perimetru() + c.perimetru() -
         ab.perimetru() - ac.perimetru() - bc.perimetru() +
         abc.perimetru();
    g << ar << ' ' << pr;
    f.close();
    g.close();
    return 0;
}