Cod sursa(job #1511365)

Utilizator Julian.FMI Caluian Iulian Julian. Data 26 octombrie 2015 18:14:40
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
struct punct
{long long x,y;};

struct dre
{punct sj,ds;};

long arie(dre a)
{return (a.ds.y-a.sj.y)*(a.ds.x-a.sj.x);}
long perimetru(dre p)
{return 2*(p.ds.x-p.sj.x+p.ds.y-p.sj.y);}

int intersectie(dre a,dre b)
{
    return !(b.sj.y>a.ds.y || b.ds.y<a.sj.y || b.sj.x>a.ds.x || b.ds.x<a.sj.y);
}

void unire(dre a,dre b,dre &c)
{if(intersectie(a,b))
    {c.sj.x=max(a.sj.x,b.sj.x);
    c.sj.y=max(a.sj.y,b.sj.y);
    c.ds.x=min(a.ds.x,b.ds.x);
    c.ds.y=min(a.ds.y,b.ds.y);}
    else
    {
        c.sj.x=c.ds.x=c.sj.y=c.ds.y=0;
    }
}

int main()
{dre a,b,c,d;
long long rez=0,per=0;

    fin>>a.sj.x>>a.sj.y>>a.ds.x>>a.ds.y;
    fin>>b.sj.x>>b.sj.y>>b.ds.x>>b.ds.y;
    fin>>c.sj.x>>c.sj.y>>c.ds.x>>c.ds.y;

rez+=arie(a);
per+=perimetru(a);

rez+=arie(b);
per+=perimetru(b);

rez+=arie(c);
per+=perimetru(c);

unire(a,b,d);
rez-=arie(d);
per-=perimetru(d);

unire(a,c,d);
rez-=arie(d);
per-=perimetru(d);

unire(b,c,d);
rez-=arie(d);
per-=perimetru(d);

unire(a,b,d);
unire(c,d,a);
rez+=arie(a);
per+=perimetru(a);
fout<<rez<<' '<<per;
}