Cod sursa(job #880248)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 16 februarie 2013 15:43:44
Problema Reuniune Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.03 kb
#include <fstream>

using namespace std;

struct punct
{
    long long int x;
    long long int y;
};

void init(punct &a)
{
    a.x=0;
    a.y=0;
}

struct dreptunghi
{
    punct st_jos;
    punct dr_sus;
};

void init(dreptunghi &a)
{
    a.st_jos.x=0;
    a.st_jos.y=0;

    a.dr_sus.x=0;
    a.dr_sus.y=0;
}

bool se_intersecteaza(dreptunghi &a,dreptunghi &b)
{
    if(a.dr_sus.x<b.st_jos.x)
        return 0;
    if(a.dr_sus.y<b.st_jos.y)
        return 0;

    if(a.st_jos.x>b.dr_sus.x)
        return 0;
    if(a.st_jos.y>b.dr_sus.y)
        return 0;

    return 1;
}

long long int minim(long long int a,long long int b)
{
    if(a<b)
        return a;
    return b;
}

long long int maxim(long long int a,long long int b)
{
    if(a>b)
        return a;
    return b;
}

dreptunghi intersectie(dreptunghi &a, dreptunghi &b)
{
    dreptunghi aux;
    init(aux);

    aux.dr_sus.x=minim(a.dr_sus.x,b.dr_sus.x);
    aux.dr_sus.y=minim(a.dr_sus.y,b.dr_sus.y);

    aux.st_jos.x=maxim(a.st_jos.x,b.st_jos.x);
    aux.st_jos.y=maxim(a.st_jos.y,b.st_jos.y);

    return aux;
}

dreptunghi intersectie(dreptunghi &a,dreptunghi &b, dreptunghi &c)
{

    dreptunghi aux;
    init(aux);

    aux=intersectie(a,b);

    return intersectie(aux,c);
}



long long int modul(long long int a)
{
    if(a<0)
        return ((-1)*(a));
    return a;
}

long long int arie(dreptunghi &a)
{
    return modul(modul(a.dr_sus.x-a.st_jos.x)*modul(a.dr_sus.y-a.st_jos.y));
}

long long int perimetru(dreptunghi &a)
{
    return modul((modul(a.dr_sus.x-a.st_jos.x)+modul(a.dr_sus.y-a.st_jos.y))*2);
}

int main()
{
    ifstream fin("reuniune.in");
    ofstream fout("reuniune.out");

    dreptunghi a,b,c;
    fin>>a.st_jos.x>>a.st_jos.y;
    fin>>a.dr_sus.x>>a.dr_sus.y;


    fin>>b.st_jos.x>>b.st_jos.y;
    fin>>b.dr_sus.x>>b.dr_sus.y;


    fin>>c.st_jos.x>>c.st_jos.y;
    fin>>c.dr_sus.x>>c.dr_sus.y;

    dreptunghi ab,ac,bc,abc;

    if(se_intersecteaza(a,b)==1)
    {
        ab=intersectie(a,b);
    }
    else
    {
        ab.dr_sus.x=0;
        ab.dr_sus.y=0;
        ab.st_jos.x=0;
        ab.st_jos.y=0;
    }


    if(se_intersecteaza(a,c)==1)
    {
        ac=intersectie(a,c);
    }
    else
    {
        ac.dr_sus.x=0;
        ac.dr_sus.y=0;
        ac.st_jos.x=0;
        ac.st_jos.y=0;
    }


    if(se_intersecteaza(b,c)==1)
    {
        bc=intersectie(b,c);
    }
    else
    {
        bc.dr_sus.x=0;
        bc.dr_sus.y=0;
        bc.st_jos.x=0;
        bc.st_jos.y=0;
    }

    if(se_intersecteaza(ab,c)==1)
    {
        abc=intersectie(ab,c);
    }
    else
    {
        abc.dr_sus.x=0;
        abc.dr_sus.y=0;
        abc.st_jos.x=0;
        abc.st_jos.y=0;
    }

    fout<<arie(a)+arie(b)+arie(c)-arie(ab)-arie(ac)-arie(bc)+arie(abc)<<'\n';
    fout<<perimetru(a)+perimetru(b)+perimetru(c)-perimetru(ab)-perimetru(ac)-perimetru(bc)+perimetru(abc)<<'\n';

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