Cod sursa(job #1673080)

Utilizator SilviuIIon Silviu SilviuI Data 3 aprilie 2016 14:05:58
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

struct date { long long int x1,x2,y1,y2; };

int n;
date t[5];

inline long long int abss(long long int x)
{
    if (x<0) return (-x); else return x;
}

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

    for (int i=1;i<=3;i++) {
        scanf("%lld %lld %lld %lld",&t[i].x1,&t[i].y1,&t[i].x2,&t[i].y2);
    }

    long long int sola=0,solp=0;

    for (int i=1;i<=3;i++)
        sola=sola+abss(t[i].x1-t[i].x2)*abss(t[i].y1-t[i].y2),
        solp=solp+2*abss(t[i].x1-t[i].x2)+2*abss(t[i].y1-t[i].y2);

    for (int i=1;i<=3;i++)
        for (int j=i+1;j<=3;j++) {
            long long int x1=max(t[i].x1,t[j].x1),x2=min(t[i].x2,t[j].x2);
            long long int y1=max(t[i].y1,t[j].y1),y2=min(t[i].y2,t[j].y2);

            if (x1<=x2 && y1<=y2) sola=sola-(x2-x1)*(y2-y1),solp=solp-2*(x2-x1)-2*(y2-y1);

    }

    long long int x1=-2e9,x2=2e9,y1=-2e9,y2=2e9;

    for (int i=1;i<=3;i++) {
        x1=max(x1,t[i].x1); x2=min(x2,t[i].x2);
        y1=max(y1,t[i].y1); y2=min(y2,t[i].y2);
    }

    if (x1<=x2 && y1<=y2) sola=sola+(x2-x1)*(y2-y1),solp=solp+2*(x2-x1)+2*(y2-y1);

    printf("%lld %lld",sola,solp);

    return 0;
}