Cod sursa(job #938213)

Utilizator Athena99Anghel Anca Athena99 Data 12 aprilie 2013 01:16:07
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <cassert>
#include <cstdio>

long long x11=0,x12=0,y11=0,y12=0,x21=0,x22=0,y21=0,y22=0,x31=0,x32=0,y31=0,y32=0,a=0,p=0;
long long abx1=0,abx2=0,aby1=0,aby2=0,acx1=0,acx2=0,acy1=0,acy2=0,bcy1=0,bcy2=0,bcx1=0,bcx2=0,abcx1=0,abcx2=0,abcy1=0,abcy2=0;

int max(int a,int b)
{
    if (a>b)
        return a;
    return b;
}

int min(int a,int b)
{
    if (a<b)
        return a;
    return b;
}

void read()
{
    assert(scanf("%lld%lld%lld%lld",&x11,&y11,&x12,&y12));
    assert(scanf("%lld%lld%lld%lld",&x21,&y21,&x22,&y22));
    assert(scanf("%lld%lld%lld%lld",&x31,&y31,&x32,&y32));
}

void ab()
{
    abx1=max(x11,x21);
    abx2=min(x12,x22);
    aby1=max(y11,y21);
    aby2=min(y12,y22);
}

void ac()
{
    acx1=max(x11,x31);
    acx2=min(x12,x32);
    acy1=max(y11,y31);
    acy2=min(y12,y32);
}

void bc()
{
    bcx1=max(x21,x31);
    bcx2=min(x22,x32);
    bcy1=max(y21,y31);
    bcy2=min(y22,y32);
}

void abc()
{
    ab();
    ac();
    bc();

    if (abx1>abx2||aby1>aby2)
        abx1=abx2=aby1=aby2=0;
    if (acx1>acx2||acy1>acy2)
        acx1=acx2=acy1=acy2=0;
    if (bcx1>bcx2||bcy1>bcy2)
        bcx1=bcx2=bcy1=bcy2=0;

    abcx1=max(abx1,x31);
    abcx2=min(abx2,x32);
    abcy1=max(aby1,y31);
    abcy2=min(aby2,y32);

    if (abcx1>abcx2||abcy1>abcy2)
        abcx1=abcx2=abcy1=abcy2=0;
}

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

    read();
    abc();

    a=(x12-x11)*(y12-y11)+(x22-x21)*(y22-y21)+(x32-x31)*(y32-y31)+(abcx2-abcx1)*(abcy2-abcy1);
    a=a-((abx2-abx1)*(aby2-aby1)+(acx2-acx1)*(acy2-acy1)+(bcx2-bcx1)*(bcy2-bcy1));

    p=x12+y12+x22+y22+x32+y32+abx1+aby1+acx1+acy1+bcx1+bcy1+abcx2+abcy2;
    p=p-(x11+y11+x21+y21+x31+y31+abx2+aby2+acx2+acy2+bcx2+bcy2+abcx1+abcy1);
    p=p+p;

    assert(printf("%lld %lld\n",a,p));

    return 0;
}