Cod sursa(job #2247171)

Utilizator ZanoxNonea Victor Zanox Data 27 septembrie 2018 22:54:56
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
#include <algorithm>

int area(int*a)
{
    if(a[0]>a[2] || a[1]>a[3])return 0;
    return (a[2] - a[0])*(a[3] - a[1]);
}

int peri(int*a)
{
    if(a[0]>a[2] || a[1]>a[3])return 0;
    return 2*((a[2] - a[0]) + (a[3] - a[1]));
}

int* sect(int*a, int*b)
{
    if(a[0]>a[2] || a[1]>a[3])return a;
    if(b[0]>b[2] || b[1]>b[3])return b;
    int *sol = new int[4];
    sol[0] = std::max(a[0],b[0]);
    sol[1] = std::max(a[1],b[1]);
    sol[2] = std::min(a[2],b[2]);
    sol[3] = std::min(a[3],b[3]);
    return sol;
}

int main()
{
    int *a,*b,*c;
    a = new int[4];
    b = new int[4];
    c = new int[4];
    std::fstream fin("reuniune.in",std::ios::in),
            fout("reuniune.out",std::ios::out);
    fin>>a[0]>>a[1]>>a[2]>>a[3];
    fin>>b[0]>>b[1]>>b[2]>>b[3];
    fin>>c[0]>>c[1]>>c[2]>>c[3];
    int sol1 = area(a) + area(b) + area(c) -
            (area(sect(a,b)) + area(sect(b,c)) + area(sect(c,a)) ) +
                area(sect(a,sect(b,c)));
    int sol2 = peri(a) + peri(b) + peri(c) -
            (peri(sect(a,b)) + peri(sect(b,c)) + peri(sect(c,a))) +
                peri(sect(a,sect(b,c)));
    fout<<sol1<<' '<<sol2;
}