Cod sursa(job #1951200)

Utilizator PaulStighiStiegelbauer Paul-Alexandru PaulStighi Data 3 aprilie 2017 14:46:19
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include<fstream>
#include<iostream>
using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");

struct Dreptunghi
{
    long long x1,x2,y1,y2;
};

long long Area,Per;
Dreptunghi D1,D2,D3;

void Read()
{
    fin>>D1.x1>>D1.y1>>D1.x2>>D1.y2;
    fin>>D2.x1>>D2.y1>>D2.x2>>D2.y2;
    fin>>D3.x1>>D3.y1>>D3.x2>>D3.y2;
}

long long per(Dreptunghi A)
{
    return 2 * (A.x2 - A.x1 + A.y2 - A.y1);
}

long long area(Dreptunghi A)
{
    return (A.x2 - A.x1) * (A.y2 - A.y1);
}

Dreptunghi newD(Dreptunghi A,Dreptunghi B)
{
    Dreptunghi C;

    C.x1 = max(A.x1,B.x1);
    C.y1 = max(A.y1,B.y1);
    C.x2 = min(A.x2,B.x2);
    C.y2 = min(A.y2,B.y2);

    if(C.x2 < C.x1 || C.y2 < C.y1) C.x1 = C.x2 = C.y1 = C.y2 = 0;
    return C;
}

void Solve()
{
    Area += area(D1);
    Area += area(D2);
    Area += area(D3);
    Area -= area(newD(D1,D2));
    Area -= area(newD(D3,D2));
    Area -= area(newD(D1,D3));
    Area += area(newD(D1,newD(D2,D3)));

    Per += per(D1);
    Per += per(D2);
    Per += per(D3);
    Per -= per(newD(D1,D2));
    Per -= per(newD(D3,D2));
    Per -= per(newD(D1,D3));
    Per += per(newD(D1,newD(D2,D3)));
}

void Print()
{
    fout<<Area<<" "<<Per<<"\n";
}

int main()
{
    Read();
    Solve();
    Print();

    fin.close();
    fout.close();
    return 0;
}