Cod sursa(job #1073875)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 6 ianuarie 2014 21:19:57
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <cstdio>
#include <vector>

using namespace std;

int X1 = 0;
int X2 = 1;
int Y1 = 2;
int Y2 = 3;

int rec[5][4];
long long Per;
long long Arie;
int c;
int x0,y0,x1,y1;
int scot;

void inter( int r1,int r2,int rf ) {
    rec[rf][X1] = max( rec[r1][X1], rec[r2][X1] );
    rec[rf][X2] = min( rec[r1][X2], rec[r2][X2] );
    rec[rf][Y1] = max( rec[r1][Y1], rec[r2][Y1] );
    rec[rf][Y2] = min( rec[r1][Y2], rec[r2][Y2] );
}

long long cArie( int r ) {
    if ( rec[r][X1] <= rec[r][X2] && rec[r][Y1] <= rec[r][Y2] ) {
        return ( (long long) (rec[r][X2]-rec[r][X1])*(rec[r][Y2]-rec[r][Y1] ) );
    }
    return 0;
}

long long cPer( int r ) {
    if ( rec[r][X1] <= rec[r][X2] && rec[r][Y1] <= rec[r][Y2] ) {
        return ( (long long) 2*(rec[r][X2]-rec[r][X1]) + 2*(rec[r][Y2]-rec[r][Y1]) );
    }
    return 0;
}

int main()
{
    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);
    for ( int i = 0; i < 3; i++ )
        scanf("%d %d %d %d\n", &rec[i][X1], &rec[i][Y1], &rec[i][X2], &rec[i][Y2] );
    inter( 0, 1, 3 );
    inter( 0, 2, 4 );
    inter( 1, 2, 5 );
    inter( 3, 4, 6 );
    inter( 5, 6, 7 );
    Arie = cArie(0) + cArie(1) + cArie(2) - cArie(3) - cArie(4) - cArie(5) + cArie(7);
    Per = cPer(0) + cPer(1) + cPer(2) - cPer(3) - cPer(4) - cPer(5) + cPer(7);
    printf("%lld %lld\n", Arie, Per);
    return 0;
}