Pagini recente » Istoria paginii runda/simulareoji_2006_11-12 | Cod sursa (job #549667) | Cod sursa (job #633042) | Cod sursa (job #2744232) | Cod sursa (job #379499)
Cod sursa(job #379499)
#include <algorithm>
using namespace std;
struct dreptunghi {
int x0, x1, y0, y1;
};
int A, P;
dreptunghi aux, d[ 3 ];
int aria( dreptunghi d ) {
return ( d.x1 - d.x0 )*( d.y1 - d.y0 );
}
int intersectie( dreptunghi d1, dreptunghi d2 ) {
return d1.x0 <= d2.x1 && d1.x1 >= d2.x0 && d1.y0 <= d2.y1 && d1.y1 >= d2.y0;
}
int perimetru( dreptunghi d ) {
return 2*( ( d.x1 - d.x0 )+( d.y1 - d.y0 ) );
}
void reuniune( dreptunghi d1, dreptunghi d2 ) {
aux.x0 = max( d1.x0, d2.x0 );
aux.y0 = max( d1.y0, d2.y0 );
aux.x1 = min( d1.x1, d2.x1 );
aux.y1 = min( d1.y1, d2.y1 );
}
int main() {
freopen( "reuniune.in", "r", stdin );
freopen( "reuniune.out", "w", stdout );
int i;
for( i = 0; i < 3; ++i )
scanf( "%d %d %d %d", &d[ i ].x0, &d[ i ].y0, &d[ i ].x1, &d[ i ].y1 );
A = aria( d[ 0 ] ) + aria( d[ 1 ] ) + aria( d[ 2 ] );
P = perimetru( d[ 0 ] ) + perimetru( d[ 1 ] ) + perimetru( d[ 2 ] );
reuniune( d[ 0 ], d[ 1 ] );
A -= aria( aux );
P -= perimetru( aux );
reuniune( d[ 0 ], d[ 2 ] );
A -= aria( aux );
P -= perimetru( aux );
reuniune( d[ 1 ], d[ 2 ] );
A -= aria( aux );
P -= perimetru( aux );
reuniune( d[ 0 ], d[ 1 ] );
reuniune( aux, d[ 2 ] );
A += aria( aux );
P += perimetru( aux );
printf( "%d %d", A, P );
return 0;
}