Cod sursa(job #2087889)

Utilizator dey44andIoja Andrei-Iosif dey44and Data 14 decembrie 2017 14:53:57
Problema Reuniune Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.69 kb
#include <cmath>
#include <fstream>
#define ll long long

using namespace std;

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

struct date
{
    ll varf_x, varf_y, colt_x, colt_y;
} drept[3];

void Read()
{
    for(int i=1; i<=3; i++)
        in >> drept[i].varf_x >> drept[i].varf_y >> drept[i].colt_x >> drept[i].colt_y;
}

int Arie(int i, int j)
{
    ll varf_fx, varf_fy, colt_fx, colt_fy;
    varf_fx = max(drept[i].varf_x,drept[j].varf_x);
    varf_fy = max(drept[i].varf_y,drept[j].varf_y);
    colt_fx = min(drept[i].colt_x,drept[j].colt_x);
    colt_fy = min(drept[i].colt_y,drept[j].colt_y);
    if(colt_fx >= varf_fx && colt_fy >= colt_fx) return (colt_fx - varf_fx) * (colt_fy - varf_fy);
    else return 0;
}

int Perimetru(int i, int j)
{
    ll varf_fx, varf_fy, colt_fx, colt_fy;
    varf_fx = max(drept[i].varf_x,drept[j].varf_x);
    varf_fy = max(drept[i].varf_y,drept[j].varf_y);
    colt_fx = min(drept[i].colt_x,drept[j].colt_x);
    colt_fy = min(drept[i].colt_y,drept[j].colt_y);
    if(colt_fx >= varf_fx && colt_fy >= colt_fx) return 2*(abs((colt_fx - varf_fx)) + abs((colt_fy - varf_fy)));
    else return 0;
}

int Ariex3()
{
    ll varf_fx, varf_fy, colt_fx, colt_fy;
    varf_fx = max(drept[1].varf_x,drept[2].varf_x);
    varf_fy = max(drept[1].varf_y,drept[2].varf_y);
    colt_fx = min(drept[1].colt_x,drept[2].colt_x);
    colt_fy = min(drept[1].colt_y,drept[2].colt_y);
    varf_fx = max(varf_fx,drept[3].varf_x);
    varf_fy = max(varf_fy,drept[3].varf_y);
    colt_fx = min(colt_fx,drept[3].colt_x);
    colt_fy = min(colt_fy,drept[3].colt_y);
    if(colt_fx >= varf_fx && colt_fy >= colt_fx)
        return (colt_fx - varf_fx) * (colt_fy - varf_fy);
    else return 0;
}

int Perimetrux3()
{
    ll varf_fx, varf_fy, colt_fx, colt_fy;
    varf_fx = max(drept[1].varf_x,drept[2].varf_x);
    varf_fy = max(drept[1].varf_y,drept[2].varf_y);
    colt_fx = min(drept[1].colt_x,drept[2].colt_x);
    colt_fy = min(drept[1].colt_y,drept[2].colt_y);
    varf_fx = max(varf_fx,drept[3].varf_x);
    varf_fy = max(varf_fy,drept[3].varf_y);
    colt_fx = min(colt_fx,drept[3].colt_x);
    colt_fy = min(colt_fy,drept[3].colt_y);
    if(colt_fx >= varf_fx && colt_fy >= colt_fx)
        return 2*(abs((colt_fx - varf_fx)) + abs((colt_fy - varf_fy)));
    else return 0;
}

int Solve()
{
    ll ariel = Arie(1,1) + Arie(2,2) + Arie(3,3) + Ariex3() - Arie(1,2) - Arie(2,3) - Arie(1,3);
    ll perimeriel = Perimetru(1,1) + Perimetru(2,2) + Perimetru(3,3) + Perimetrux3() - Perimetru(1,2) - Perimetru(2,3) - Perimetru(1,3);
    out << ariel << " " << perimeriel << "\n";
}

int main()
{
    Read();
    Solve();
    return 0;
}