Cod sursa(job #993204)

Utilizator thewildnathNathan Wildenberg thewildnath Data 3 septembrie 2013 14:49:09
Problema Reuniune Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<stdio.h>

typedef struct punct
{
    int x1,y1,x2,y2;
}punct;
punct a,b,c,s1,s2,s3,s4;

inline int max(int a,int b)
{
    return a>b?a:b;
}
inline int min(int a,int b)
{
    return a<b?a:b;
}

punct inter(punct a,punct b)
{
    punct aux;
    aux.x1=max(a.x1,b.x1);
    aux.y1=max(a.x1,b.x1);
    aux.x2=min(a.x2,b.x2);
    aux.y2=min(a.y2,b.y2);
    if(aux.x1>aux.x2||aux.y1>aux.y2)
        aux.x1=aux.x2=aux.y1=aux.y2=0;
}

long long arie(punct a)
{
    long long aux;
    aux=(long long)(a.x2-a.x1)*(a.y2-a.y1);
    if(aux<0)
        aux=0;
    return aux;
}

long long perimetru(punct a)
{
    long long aux;
    aux=(long long)(a.x2-a.x1)*2+(a.y2-a.y1)*2;
    if(aux<0)
        aux=0;
    return aux;
}

int main()
{
    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);
    long long s,p;
    scanf("%d%d%d%d",&a.x1,&a.y1,&a.x2,&a.y2);
    scanf("%d%d%d%d",&b.x1,&b.y1,&b.x2,&b.y2);
    scanf("%d%d%d%d",&c.x1,&c.y1,&c.x2,&c.y2);

    s1=inter(a,b);
    s2=inter(a,c);
    s3=inter(b,c);
    s4=inter(s1,s2);

    s=arie(a)+arie(b)+arie(c)-arie(s1)-arie(s2)-arie(s3)+arie(s4);

    p=perimetru(a)+perimetru(b)+perimetru(c)-perimetru(s1)-perimetru(s2)-perimetru(s3)+perimetru(s4);


    printf("%lld %lld\n",s,p);

    return 0;
}