Cod sursa(job #953058)

Utilizator primulDarie Sergiu primul Data 24 mai 2013 18:34:48
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include<fstream>
#include<algorithm>
using namespace std ;
  
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
  
#define maxn 4
  
struct dreptunghi
{
    long long x1, y1, x2, y2 ;
};
  
int n = 3 ;
dreptunghi v[maxn] ;
  
long long solA, solP ;
  
void citire()
{
    for(int i = 1; i <= n; ++i )
        fin >> v[i].x1 >> v[i].y1 >> v[i].x2 >> v[i].y2 ;
}
  
long long arie(dreptunghi D)
{
    return ( D.x2 - D.x1 ) * ( D.y2 - D.y1 ) ;
}
  
long long 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 ;
}