Cod sursa(job #1978160)

Utilizator victoreVictor Popa victore Data 7 mai 2017 00:18:06
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<cstdio>

const int nmax=1e9+5;

struct dreptunghi
{
    long long x0,y0,x1,y1;
}a,b,c;

inline long long min(long long a,long long b)
{
    if(a>b)
        return b;
    return a;
}
inline long long max(long long a,long long b)
{
    if(a>b)
        return a;
    return b;
}
inline dreptunghi intersectie(dreptunghi a,dreptunghi b)
{
    dreptunghi z;
    z.x0=max(a.x0,b.x0);
    z.y0=max(a.y0,b.y0);
    z.x1=min(a.x1,b.x1);
    z.y1=min(a.y1,b.y1);
    if(z.x0>z.x1||z.y0>z.y1)
        z.x0=z.x1=z.y0=z.y1=0;
    return z;
}
inline long long aria(dreptunghi l)
{
    return 1LL*(l.x1-l.x0)*(l.y1-l.y0);
}
inline long long perimetru(dreptunghi l)
{
    return 1LL*2*(l.x1-l.x0+l.y1-l.y0);
}
int main()
{
    long long arie,perimetrul;
    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);
    scanf("%lld%lld%lld%lld",&a.x0,&a.y0,&a.x1,&a.y1);
    scanf("%lld%lld%lld%lld",&b.x0,&b.y0,&b.x1,&b.y1);
    scanf("%lld%lld%lld%lld",&c.x0,&c.y0,&c.x1,&c.y1);
    arie=aria(a)+aria(b)+aria(c)-aria(intersectie(a,b))-aria(intersectie(b,c))-aria(intersectie(a,c))+aria(intersectie(a,intersectie(b,c)));
    perimetrul=perimetru(a)+perimetru(b)+perimetru(c)-perimetru(intersectie(a,b))-perimetru(intersectie(b,c))-perimetru(intersectie(a,c))+perimetru(intersectie(a,intersectie(b,c)));
    printf("%lld %lld",arie,perimetrul);
}