Cod sursa(job #379829)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 4 ianuarie 2010 09:43:08
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<stdio.h>
struct ok
{
    int x1,y1,x2,y2;
} a[4],tr,tr12,tr13,tr23;
long long max (long long x,long long y)
{
    if(x<y)
        return y;
    return x;
}
long long min (long long x,long long y)
{
    if(x>y)
        return y;
    return x;
}
long long arie (ok n)
{
    return (n.x2-n.x1)*(n.y2-n.y1);
}
ok intersectie (ok n,ok m)
{
    ok nm;
    if(max(n.x1,m.x1)<=min(n.x2,m.x2))
    {
        nm.x1=max(n.x1,m.x1);
        nm.x2=min(n.x2,m.x2);
    }
    if(max(n.y1,m.y1)<=min(n.y2,m.y2))
    {
        nm.y1=max(n.y1,m.y1);
        nm.y2=min(n.y2,m.y2);
    }
    return nm;
}
void solve1 ()
{
    long long s;
    s=arie(a[1])+arie(a[2])+arie(a[3])-arie(tr12)-arie(tr13)-arie(tr23)+arie(tr);
    printf("%lld ",s);
}
long long perim (ok n)
{
    return 2*(n.x2-n.x1+n.y2-n.y1);
}
void solve2 ()
{
    long long s;
    s=perim(a[1])+perim(a[2])+perim(a[3])-perim(tr12)-perim(tr13)-perim(tr23)+perim(tr);
    printf("%lld",s);
}
int main ()
{
    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);
    for(int i=1;i<=3;++i)
        scanf("%d%d%d%d",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);
    tr12=intersectie (a[1],a[2]);
    tr13=intersectie (a[1],a[3]);
    tr23=intersectie (a[2],a[3]);
    tr=intersectie (tr13,a[2]);
    solve1();
    solve2();
    return 0;
}