Cod sursa(job #945238)

Utilizator matei_cChristescu Matei matei_c Data 1 mai 2013 12:22:11
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include<fstream>
#include<algorithm>
using namespace std ;

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

#define maxn 4

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

int n = 3 ;
dreptunghi v[maxn] ;

int solA, solP ;

void citire()
{
    for(int i = 1; i <= n; ++i )
        fin >> v[i].x1 >> v[i].y1 >> v[i].x2 >> v[i].y2 ;
}

int arie(dreptunghi D)
{
    return ( D.x2 - D.x1 ) * ( D.y2 - D.y1 ) ;
}

int perimetru(dreptunghi D)
{

    return 2 * ( D.x2 - D.x1 ) + 2 * ( D.y2 - D.y1 ) ;
}

dreptunghi intersectie(dreptunghi A, dreptunghi B)
{
    dreptunghi X ;

    X.x1 = max( A.x1, B.x1 ) ;
    X.y1 = max( A.y1, B.y1) ;

    X.x2 = min( A.x2, B.x2 ) ;
    X.y2 = min( A.y2, B.y2) ;

    if( X.x1 > X.x2 || X.y1 > X.y2 )
        X.x1 = X.y1 = X.x2 = X.y2 = 0 ;

    return X ;
}

void rezolvare()
{
    solA = arie( v[1] ) + arie( v[2] ) + arie( v[3] ) ;
    solA -= ( arie( intersectie( v[1], v[2] ) ) + arie( intersectie( v[2], v[3] ) ) + arie( intersectie( v[1], v[3] ) ) ) ;
    solA += arie( intersectie( v[1], intersectie( v[2], v[3] ) ) ) ;

    solP = perimetru( v[1] ) + perimetru( v[2] ) + perimetru( v[3] ) ;
    solP -= ( perimetru( intersectie( v[1], v[2] ) ) + perimetru( intersectie( v[2], v[3] ) ) + perimetru( intersectie( v[1], v[3] ) ) );
    solP += perimetru( intersectie( v[1], intersectie( v[2], v[3] ) ) ) ;
}

void afisare()
{
    fout << solA << " " << solP ;
}

int main()
{
    citire() ;

    rezolvare() ;

    afisare() ;

    return 0 ;
}