Cod sursa(job #1201633)

Utilizator alex_bucevschiBucevschi Alexandru alex_bucevschi Data 25 iunie 2014 16:09:33
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <cstdio>
#include <algorithm>
using namespace std;
struct drept
{
    long long x1,x2,y11,y2,l1,l2,a,p;
}d[5];
long long A,P,i,j,x1,x2,y11,y2,l1,l2;
int main()
{
    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);
    scanf("%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld",&d[1].x1,&d[1].y11,&d[1].x2,&d[1].y2,&d[2].x1,&d[2].y11,&d[2].x2,&d[2].y2,&d[3].x1,&d[3].y11,&d[3].x2,&d[3].y2);
    for(i=1;i<=3;i++)
    {
        d[i].l1=d[i].y11>d[i].y2?d[i].y11-d[i].y2:d[i].y2-d[i].y11;
        d[i].l2=d[i].x1>d[i].x2?d[i].x1-d[i].x2:d[i].x2-d[i].x1;
        d[i].p=2*d[i].l1+2*d[i].l2;
        d[i].a=d[i].l1*d[i].l2;
    }
    A=d[1].a+d[2].a+d[3].a;
    P=d[1].p+d[2].p+d[3].p;
    for(i=1;i<3;i++)
        for(j=i+1;j<=3;j++)
        {
            x1=max(d[i].x1,d[j].x1);
            y11=max(d[i].y11,d[j].y11);
            x2=min(d[i].x2,d[j].x2);
            y2=min(d[i].y2,d[j].y2);
            l1=y11>y2?y11-y2:y2-y11;
            l2=x2>x1?x2-x1:x1-x2;
            if(x2>=x1&&y2>=y11)
            {
                A-=(l1*l2);
                P-=(2*l1+2*l2);
            }
        }
    x1=max(d[1].x1,d[2].x1);
    y11=max(d[1].y11,d[2].y11);
    x2=min(d[1].x2,d[2].x2);
    y2=min(d[1].y2,d[2].y2);
    if(x2>=x1&&y2>=y11)
    {
        x1=max(x1,d[3].x1);
        y11=max(y11,d[3].y11);
        x2=min(x2,d[3].x2);
        y2=min(y2,d[3].y2);
        l1=y11>y2?y11-y2:y2-y11;
        l2=x1>x2?x1-x2:x2-x1;
        if(x2>=x1&&y2>=y11)
        {
            A+=(l1*l2);
            P+=(2*l1+2*l2);
        }
    }
    printf("%lld %lld\n",A,P);
    return 0;
}