Cod sursa(job #1369059)

Utilizator andru47Stefanescu Andru andru47 Data 2 martie 2015 21:26:36
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <cstdio>
#include <algorithm>
using namespace std;
long long x1,x2,x3,y11,y2,y3,X1,X2,X3,Y1,Y2,Y3,y4,Y4,a[100][100],A[100][100],N,i,j;
void intersectie(int ind,int ind2)
{
    ++N;
    A[N][1]=max(a[ind][1],a[ind2][1]);
    A[N][2]=max(a[ind][2],a[ind2][2]);
    A[N][3]=min(a[ind][3],a[ind2][3]);
    A[N][4]=min(a[ind][4],a[ind2][4]);
    if (A[N][1]>A[N][3]||A[N][2]>A[N][4])
    {
        A[N][1]=A[N][2]=A[N][3]=A[N][4]=0;
    }
    return ;
}
long long arie(long long a[100])
{
    return 1LL*((a[3]-a[1])*(a[4]-a[2]));
}
long long perimetru(long long a[100])
{
    return 2LL*((a[3]-a[1])+(a[4]-a[2]));
}
int main()
{
    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);
    for (i=1; i<=3; i++)
        for (j=1; j<=4; j++)
            scanf("%lld ",&a[i][j]);
    intersectie(1,2);
    intersectie(1,3);
    intersectie(2,3);
    ++N;
    A[N][1]=max(A[1][1],a[3][1]);
    A[N][2]=max(A[1][2],a[3][2]);
    A[N][3]=min(A[1][3],a[3][3]);
    A[N][4]=min(A[1][4],a[3][4]);
    if (A[N][1]>A[N][3]||A[N][2]>A[N][4])
    {
        A[N][1]=A[N][2]=A[N][3]=A[N][4]=0;
    }
    x1=arie(a[1]);
    x2=arie(a[2]);
    x3=arie(a[3]);
    y11=arie(A[1]);
    y2=arie(A[2]);
    y3=arie(A[3]);
    y4=arie(A[4]);
    X1=perimetru(a[1]);
    X2=perimetru(a[2]);
    X3=perimetru(a[3]);
    Y1=perimetru(A[1]);
    Y2=perimetru(A[2]);
    Y3=perimetru(A[3]);
    Y4=perimetru(A[4]);
    printf("%lld %lld",x1+x2+x3+y4-y11-y2-y3,X1+X2+X3+Y4-Y1-Y2-Y3);
    return 0;
}