Cod sursa(job #1348382)

Utilizator ade_tomiEnache Adelina ade_tomi Data 19 februarie 2015 17:49:55
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<stdio.h>
struct str
{

    int x1,x2,y1,y2;
    str(int xx1=0,int xx2=0,int yy1=0,int yy2=0)
    {

        x1=xx1;
        x2=xx2;
        y2=yy2;
        y1=yy1;
    }
};
str v[5],axb,axc,bxc,axbxc;
int min(int a,int b)
{

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

    if(a>b)
        return a;
    return b;
}
str reuniune(str a, str b)
{
    str r=str(0,0,0,0);
    r.x1=max(a.x1,b.x1);
    r.y1=max(a.y1,b.y1);
    r.x2=min(a.x2,b.x2);
    r.y2=min(a.y2,b.y2);
    if(b.x1>a.x2||a.x1>b.x2||a.y1>b.y2 || b.y1>a.y2)
        return str(0,0,0,0);
    return r;
}
long long arie(str a)
{
    return (long long)(a.x2-a.x1)*(a.y2-a.y1);
}
long long perim(str a)
{
    return (long long)(a.x2-a.x1)*2+(long long ) 2*(a.y2-a.y1);

}
int main()
{

    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);
    for(int i=1;i<=3;i++)
        scanf("%d%d%d%d",&v[i].x1,&v[i].y1,&v[i].x2,&v[i].y2);
    axb=reuniune(v[1],v[2]);
    axc=reuniune(v[1],v[3]);
    bxc=reuniune(v[2],v[3]);
    axbxc=reuniune(axb,v[3]);
    printf("%lld ",arie(v[1])+arie(v[2])+arie(v[3])-arie(axb)-arie(axc)-arie(bxc)+arie(axbxc));
    printf("%lld ",perim(v[1])+perim(v[2])+perim(v[3])-perim(axb)-perim(axc)-perim(bxc)+perim(axbxc));

    return 0;

}