Cod sursa(job #1673059)

Utilizator SilviuIIon Silviu SilviuI Data 3 aprilie 2016 13:46:12
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 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 x11=t[i].x1,x12=t[i].x2; int y11=t[i].y1,y12=t[i].y2;
            int x21=t[j].x1,x22=t[j].x2; int y21=t[j].y1,y22=t[j].y2;

            if (x11>x12) swap(x11,x12);
            if (y11>y12) swap(y11,y12);
            if (x21>x22) swap(x21,x22);
            if (y21>y22) swap(y21,y22);

            if (max(x11,x21)<min(x12,x22) && max(y11,y21)<min(y12,y22))
               sola=sola-1LL*(min(x12,x22)-max(x11,x21))*(min(y12,y22)-max(y11,y21)),
               solp=solp-2*(min(x12,x22)-max(x11,x21))-2*(min(y12,y22)-max(y11,y21));

    }

    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;
}