Cod sursa(job #1223910)

Utilizator armandpredaPreda Armand armandpreda Data 29 august 2014 11:00:07
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <cstdio>
#include <algorithm>

using namespace std;

struct dreptungi
{
    int x0,y0,x1,y1;
}v[4];
int r0,q0,r1,q1;
void reuniune(int a0,int b0,int a1,int b1,int x0,int y0,int x1,int y1);
int main()
{
    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);
    int i,j,ok=1,okk=1;
    long long a=0,p=0;
    for(i=1;i<=3;++i)
        scanf("%d%d%d%d",&v[i].x0,&v[i].y0,&v[i].x1,&v[i].y1);
    for(i=1;i<=3;++i)
    {
        a=a+1ll*((v[i].x1-v[i].x0)*(v[i].y1-v[i].y0));
        p=p+1ll*(((v[i].x1-v[i].x0)+(v[i].y1-v[i].y0))*2);
    }
    for(i=1;i<3;++i)
        for(j=i+1;j<=3;++j)
        {
            reuniune(v[i].x0,v[i].y0,v[i].x1,v[i].y1,v[j].x0,v[j].y0,v[j].x1,v[j].y1);
            ok=1;
            if(r0>=r1 or q0>=q1)
                ok=0,okk=0;
            if(ok==1)
            {
                a=a-1ll*((r1-r0)*(q1-q0));
                p=p-1ll*(((r1-r0)+(q1-q0))*2);
            }
        }
    if(okk==1)
    {
        reuniune(v[1].x0,v[1].y0,v[1].x1,v[1].y1,r0,q0,r1,q1);
        a=a+1ll*((r1-r0)*(q1-q0));
        p=p+1ll*(((r1-r0)+(q1-q0))*2);
    }
    printf("%lld %lld",a,p);
    return 0;
}
void reuniune(int a0,int b0,int a1,int b1,int x0,int y0,int x1,int y1)
{
    r0=max(a0,x0);
    q0=max(b0,y0);
    r1=min(a1,x1);
    q1=min(b1,y1);
}