Cod sursa(job #844317)

Utilizator Athena99Anghel Anca Athena99 Data 29 decembrie 2012 00:01:00
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <cstdio>
#include <cassert>

int max(int k1,int k2)
{
    if (k1>k2)
        return k1;
    else
        return k2;
}

int min(int k1,int k2)
{
    if (k1<k2)
        return k1;
    else
        return k2;
}

int main()
{
    int arie=0,perimetru=0,x=0,y=0,x1=0,x2=0,x3=0,x4=0,x5=0,x6=0,y1=0,y2=0,y3=0,y4=0,y5=0,y6=0;

    assert(freopen("reuniune.in","r",stdin));
    assert(freopen("reuniune.out","w",stdout));

    assert(scanf("%d%d%d%d",&x1,&y1,&x2,&y2));
    assert(scanf("%d%d%d%d",&x3,&y3,&x4,&y4));
    assert(scanf("%d%d%d%d",&x5,&y5,&x6,&y6));

    arie=(x2-x1)*(y2-y1)+(x4-x3)*(y4-y3)+(x6-x5)*(y6-y5);
    x=(min(min(x2,x4),x6)-max(max(x1,x3),x5))*(min(min(y2,y4),y6)-max(max(y1,y3),y5));

    perimetru=2*(x2+y2+x4+y4+x6+y6-x1-y1-x3-y3-x5-y5);
    y=2*((min(min(x2,x4),x6)-max(max(x1,x3),x5))+(min(min(y2,y4),y6)-max(max(y1,y3),y5)));

    arie+=x;
    x=(min(x2,x4)-max(x1,x3))*(min(y2,y4)-max(y3,y1))+(min(x2,x6)-max(x1,x5))*(min(y2,y6)-max(y1,y5))+(min(x6,x4)-max(x5,x3))*(min(y6,y4)-max(y3,y5));
    arie-=x;

    perimetru+=y;
    y=2*((min(x2,x4)-max(x1,x3))+(min(y2,y4)-max(y3,y1))+(min(x2,x6)-max(x1,x5))+(min(y2,y6)-max(y1,y5))+(min(x6,x4)-max(x5,x3))+(min(y6,y4)-max(y3,y5)));
    perimetru-=y;

    assert(printf("%d %d\n",arie,perimetru));

    return 0;
}