Cod sursa(job #1668108)

Utilizator mateibanuBanu Matei Costin mateibanu Data 29 martie 2016 16:04:37
Problema Reuniune Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

struct punct
{
    long long x,y;
};

void inter2(punct a,punct b,punct c,punct d,punct &r1,punct &r2)
{
    r1.x=max(a.x,c.x);
    r1.y=max(a.y,c.y);
    r2.x=min(b.x,d.x);
    r2.y=min(b.y,d.y);
}

long long aria(punct a,punct b)
{
    return (b.x-a.x)*(b.y-a.y);
}

long long verif(punct a,punct b)
{
    return a.x<=b.x&&a.y<=b.y;
}

long long per(punct a,punct b)
{
    return 2*(b.x-a.x+b.y-a.y);
}

FILE*f=fopen("reuniune.in","r");
FILE*g=fopen("reuniune.out","w");

int main()
{
    punct a1,b1,a2,b2,a3,b3,ar,br;
    long long p,a;
    fscanf(f,"%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld",&a1.x,&a1.y,&b1.x,&b1.y,&a2.x,&a2.y,&b2.x,&b2.y,&a3.x,&a3.y,&b3.x,&b3.y);
    a=aria(a1,b1)+aria(a2,b2)+aria(a3,b3);
    p=per(a1,b1)+per(a2,b2)+per(a3,b3);
    inter2(a1,b1,a2,b2,ar,br);
    if (verif(ar,br)) {a-=aria(ar,br);p-=per(ar,br);}
    inter2(a1,b1,a3,b3,ar,br);
    if (verif(ar,br)) {a-=aria(ar,br);p-=per(ar,br);}
    inter2(a3,b3,a2,b2,ar,br);
    if (verif(ar,br)) {a-=aria(ar,br);p-=per(ar,br);}
    inter2(ar,br,a1,b1,ar,br);
    a+=aria(ar,br);
    p+=per(ar,br);
    fprintf(g,"%lld %lld",a,p);
    fclose(g);
    fclose(f);
    return 0;
}