Cod sursa(job #1390868)

Utilizator BlackLordFMI Alex Oprea BlackLord Data 17 martie 2015 13:29:47
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <fstream>
using namespace std;
ifstream f("reuniune.in");
ofstream g("reuniune.out");
long long aux, i, a, p;

struct dreptunghi{
    long long x1, x2, y1, y2;
} v[4], x;

int arie(dreptunghi a){
    return 1LL*(a.x2-a.x1)*(a.y2-a.y1);
}

void reuniune(dreptunghi a, dreptunghi b, dreptunghi &c){
    c.x1=(a.x1>b.x1?a.x1:b.x1);
    c.x2=(a.x2<b.x2?a.x2:b.x2);
    c.y1=(a.y1>b.y1?a.y1:b.y1);
    c.y2=(a.y2<b.y2?a.y2:b.y2);
}

long long minim(long long x, long long y, long long z){
    if(x>y)
        x=y;
    if(x>z)
        x=z;
    return x;
}

long long maxim(long long x, long long y, long long z){
    if(x<y)
        x=y;
    if(x<z)
        x=z;
    return x;
}

int main(){
    for(i=1; i<4; i++)
    {
        f>>v[i].x1>>v[i].y1>>v[i].x2>>v[i].y2;
        if(v[i].x1>v[i].x2)
        {
            aux=v[i].x1;
            v[i].x1=v[i].x2;
            v[i].x2=aux;
        }
        if(v[i].y1>v[i].y2)
        {
            aux=v[i].y1;
            v[i].y1=v[i].y2;
            v[i].y2=aux;
        }
    }
    for(i=1; i<4; i++)
        a+=arie(v[i]);
    reuniune(v[1], v[2], x);
    a-=arie(x);
    reuniune(v[1], v[3], x);
    a-=arie(x);
    reuniune(v[2], v[3], x);
    a-=arie(x);
    reuniune(v[1], x, x);
    a+=arie(x);
    x.x1=minim(v[1].x1, v[2].x1, v[3].x1);
    x.y1=minim(v[1].y1, v[2].y1, v[3].y1);
    x.x2=maxim(v[1].x2, v[2].x2, v[3].x2);
    x.y2=maxim(v[1].y2, v[2].y2, v[3].y2);
    g<<a<<' '<<2*(x.x2-x.x1+x.y2-x.y1)<<"\n";
    return 0;
}