Cod sursa(job #323521)

Utilizator freak93Adrian Budau freak93 Data 12 iunie 2009 15:25:07
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<fstream>

using namespace std;

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

struct drept
{
    long long x1,y1,x2,y2;
} A,B,C,AUB,AUC,BUC,AUBUC;

long long aux;

drept inter(drept a,drept b)
{
    drept x;

    x.x1=max(a.x1,b.x1);
    x.x2=min(a.x2,b.x2);

    x.y1=max(a.y1,b.y1);
    x.y2=min(a.y2,b.y2);

    return x;
}

long long arie(drept a)
{
    if(a.x1>a.x2||a.y1>a.y2) return 0;
    return (a.x2-a.x1)*(a.y2-a.y1);
}

long long per(drept a)
{
    if(a.x1>a.x2||a.y1>a.y2) return 0;
    return 2*(a.x2-a.x1+a.y2-a.y1);
}

int main()
{
    f>>A.x1>>A.y1>>A.x2>>A.y2;
    f>>B.x1>>B.y1>>B.x2>>B.y2;
    f>>C.x1>>C.y1>>C.x2>>C.y2;

    if(A.x1>A.x2) aux=A.x1,A.x1=A.x2,A.x2=aux;
    if(A.y1>A.y2) aux=A.y1,A.y1=A.y2,A.y2=aux;
    if(B.x1>B.x2) aux=B.x1,B.x1=B.x2,B.x2=aux;
    if(C.x1>C.x2) aux=C.x1,C.x1=C.x2,C.x2=aux;
    if(B.y1>B.y2) aux=B.y1,B.y1=B.y2,B.y2=aux;
    if(C.y1>C.y2) aux=C.y1,C.y1=C.y2,C.y2=aux;

    AUB=inter(A,B);
    AUC=inter(A,C);
    BUC=inter(B,C);
    AUBUC=inter(AUB,C);

    g<<arie(A)+arie(B)+arie(C)-arie(AUB)-arie(AUC)-arie(BUC)+arie(AUBUC)<<" "<<per(A)+per(B)+per(C)-per(AUB)-per(AUC)-per(BUC)+per(AUBUC)<<"\n";

    f.close();
    g.close();

    return 0;
}