Cod sursa(job #1673062)

Utilizator SilviuIIon Silviu SilviuI Data 3 aprilie 2016 13:50:57
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

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

int n;
date t[5];

inline int abss(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("%d %d %d %d",&t[i].x1,&t[i].y1,&t[i].x2,&t[i].y2);
        swap(t[i].y1,t[i].y2);
    }

    long long int sola=0,solp=0;

    for (int i=1;i<=3;i++)
        sola=sola+1LL*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++) {
            int x1=max(t[i].x1,t[j].x1),x2=min(t[i].x2,t[j].x2);
            int y1=max(t[i].y2,t[j].y2),y2=min(t[i].y1,t[j].y1);

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

    }

    int x1=0,x2=2e9,y1=0,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].y2); y2=min(y2,t[i].y1);
    }

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

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

    return 0;
}