Pagini recente » Cod sursa (job #758998) | Profil Ciocirlan_Stefan_Dan_321CA | Cod sursa (job #2285848) | Cod sursa (job #1230222) | Cod sursa (job #498091)
Cod sursa(job #498091)
#include <fstream>
using namespace std;
int max(int a, int b) {
if (a >= b) return a;
else return b;
}
int min(int a, int b) {
if (a < b) return a;
else return b;
}
int main() {
ifstream f("reuniune.in");
ofstream g("reuniune.out");
long long c[3][6], xDown, yDown, xUp, yUp, surfI = 0, surf = 0, perI = 0, p = 0, per[3], area[3], k = 0;
for ( int i = 0; i < 3; i++ )
for ( int j = 0; j < 4; j++ )
f >> c[i][j];
// j = 4 -> aria dreptunghiului avand coord pe poz j = 0..3
// j = 5 -> perimetrul dreptunghiului avand coord pe poz j = 0..3
for ( int i = 0; i < 3; i++ ) {
c[i][4] = (c[i][2] - c[i][0]) * (c[i][3] - c[i][1]);
c[i][5] = 2 * (c[i][2] - c[i][0] + c[i][3] - c[i][1]);
per[i] = 0;
area[i] = 0;
}
// coordonatele intersectiei celor 3 dreptunghiuri
xDown = max(c[0][0],max(c[1][0],c[2][0]));
yDown = max(c[0][1],max(c[1][1],c[2][1]));
xUp = min(c[0][2],min(c[1][2],c[2][2]));
yUp = min(c[0][3],min(c[1][3],c[2][3]));
// aria si perimetrul intersectiei celor 3 dreptunghiuri
if ( (xDown < xUp) && (yDown < yUp) ) {
surfI = (yUp - yDown) * (xUp - xDown);
perI = 2 * (yUp - yDown + xUp - xDown);
}
// ariile comune pentru fiecare cupla de 2 dreptunghiuri
for ( int i = 0; i < 2; i++ )
for ( int j = i+1; j < 3; j++ )
if ( (min(c[i][2],c[j][2]) > max(c[i][0],c[j][0])) && (min(c[i][3],c[j][3]) > max(c[i][1],c[j][1])) ) {
area[k] = (min(c[i][2],c[j][2]) - max(c[i][0],c[j][0])) * (min(c[i][3],c[j][3]) - max(c[i][1],c[j][1]));
per[k] = 2 * ( min(c[i][2],c[j][2]) - max(c[i][0],c[j][0]) + min(c[i][3],c[j][3]) - max(c[i][1],c[j][1]) );
k++;
}
// aria totala a desenului
surf = c[0][4] + c[1][4] + c[2][4] + surfI - area[0] - area[1] - area[2];
// perimetrul total al desenului
p = c[0][5] + c[1][5] + c[2][5] + perI - per[0] - per[1] - per[2];
g << surf << " " << p;
return 0;
}