Cod sursa(job #2376732)

Utilizator AlexiaPaunescu100Alexia Paunescu AlexiaPaunescu100 Data 8 martie 2019 17:18:01
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda sim9car Marime 1.73 kb
#include <bits/stdc++.h>
using namespace std;

ifstream in ("reuniune.in") ;
ofstream out ("reuniune.out") ;

struct point
{
    int64_t x, y ;
};

struct dreptunghi
{
    point jos , sus ;
}d [ 5 ];

int64_t arie2 ( dreptunghi a , dreptunghi b )
{
    int64_t c , u , dx , dy ;

    c = min ( a.sus.y , b.sus.y ) ;
    u = max ( a.jos.y , b.jos.y ) ;

    dy = c - u ;

    c = min ( a.sus.x , b.sus.x ) ;
    u = max ( a.jos.x , b.jos.x ) ;

    dx = c - u ;

    if ( dy < 0 || dx < 0 ) return 0 ;

    d [ 4 ].jos.x = max ( a.jos.x , b.jos.x ) ;
    d [ 4 ].jos.y = max ( a.jos.y , b.jos.y ) ;
    d [ 4 ].sus.x = min ( a.sus.x , b.sus.x ) ;
    d [ 4 ].sus.y = min ( a.sus.y , b.sus.y ) ;

    return dx * dy ;
}

int64_t arie ( dreptunghi a )
{
    return ( a.sus.x - a.jos.x ) * ( a.sus.y - a.jos.y ) ;
}

int64_t p ( dreptunghi a )
{
    return ( a.sus.x - a.jos.x  +  a.sus.y - a.jos.y ) * 2 ;
}

int64_t p2 ( dreptunghi a , dreptunghi b )
{
    int64_t c , u , dx , dy ;

    c = min ( a.sus.y , b.sus.y ) ;
    u = max ( a.jos.y , b.jos.y ) ;

    dy = c - u ;

    c = min ( a.sus.x , b.sus.x ) ;
    u = max ( a.jos.x , b.jos.x ) ;

    dx = c - u ;

    if ( dy < 0 || dx < 0 ) return 0 ;

    return ( dx + dy ) * 2 ;
}

int main()
{
    for ( int i = 1 ; i <= 3 ; ++ i )
        in >> d [ i ].jos.x >> d [ i ].jos.y >> d [ i ].sus.x >> d [ i ].sus.y ;






    out << 1LL * ( arie ( d [ 1 ] ) + arie ( d [ 2 ] ) + arie ( d [ 3 ] ) - arie2 ( d[1] , d[2] ) - arie2( d[1] , d[3] ) - arie2 ( d[2] , d[3] ) + arie2 (d[1] , d[4]) ) << ' ' ;
    out << 1LL * ( p(d[1]) + p(d[2]) + p(d[3]) - p2( d[1] , d[2] ) - p2 ( d[1] , d[3] ) - p2 ( d[2] , d[3] ) + p2 (d[1] , d[4]) ) ;
}