Pagini recente » Cod sursa (job #1143743) | Istoria paginii runda/judet9-1 | Cod sursa (job #1674927) | Monitorul de evaluare | Cod sursa (job #947527)
Cod sursa(job #947527)
#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 ;
}