Cod sursa(job #1810916)

Utilizator silkMarin Dragos silk Data 20 noiembrie 2016 17:52:43
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <cstdio>
#define INF 1<<30
#define MIN(a,b)((a)<(b)?(a):(b))
#define MAX(a,b)((a)>(b)?(a):(b))
#define ll long long

struct drept{ int dx,dy,sx,sy; };
drept A,B,C,AB,AC,BC,ABC;

void Inters(drept& A, drept& B, drept& X)
{
    X.dx = MIN( A.dx, B.dx );
    X.dy = MIN( A.dy, B.dy );
    X.sx = MAX( A.sx, B.sx );
    X.sy = MAX( A.sy, B.sy );

    if( X.dx < X.sx || X.dy < X.sy ||
        A.dx < A.sx || A.dy < A.sy ||
        B.dx < B.sx || B.dy < B.sy   ) X.sx = INF;
}

ll Aria(drept A)
{
    if( A.sx == INF ) return 0;
    return 1LL * ( A.dx - A.sx ) * ( A.dy - A.sy );
}

ll Perim(drept A)
{
    if( A.sx == INF ) return 0;
    return 2LL * ( A.dx - A.sx + A.dy - A.sy );
}

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

    ll ans1,ans2;

    scanf("%d %d %d %d", &A.sx, &A.sy, &A.dx, &A.dy );
    scanf("%d %d %d %d", &B.sx, &B.sy, &B.dx, &B.dy );
    scanf("%d %d %d %d", &C.sx, &C.sy, &C.dx, &C.dy );

    Inters(A,B,AB);
    Inters(A,C,AC);
    Inters(B,C,BC);
    Inters(AB,C,ABC);

    ans1 = Aria(A) + Aria(B) + Aria(C) - Aria(AB) - Aria(AC) - Aria(BC) + Aria(ABC);
    ans2 = Perim(A) + Perim(B) + Perim(C) - Perim(AB) - Perim(AC) - Perim(BC) + Perim(ABC);

    printf("%lld %lld\n",ans1,ans2);





return 0;
}