Cod sursa(job #497672)

Utilizator newbieFMI - Cristina Andrei newbie Data 3 noiembrie 2010 00:42:59
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#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");
    int coord[3][5], xDown, yDown, xUp, yUp, surfI = 0, surf = 0, per = 0, area1 = 0, area2 = 0, area3 = 0;
    for ( int i = 0; i < 3; i++ )
        for ( int j = 0; j < 4; j++ ) 
            f >> coord[i][j];
    
    for ( int i = 0; i < 3; i++ )
        coord[i][4] = (coord[i][2] - coord[i][0]) * (coord[i][3] - coord[i][1]);
            
    // coordonatele intersectiei celor 3 dreptunghiuri
    
    xDown = max(coord[0][0],max(coord[1][0],coord[2][0]));
    yDown = max(coord[0][1],max(coord[1][1],coord[2][1]));
    xUp = min(coord[0][2],min(coord[1][2],coord[2][2]));
    yUp = min(coord[0][3],min(coord[1][3],coord[2][3]));
    
    if ( (xDown < xUp) && (yDown < yUp) ) {
        surfI = (yUp - yDown) * (xUp - xDown);
    }
    
    // ariile comune pentru fiecare cupla de 2 dreptunghiuri
    
    area1 = (min(coord[0][2],coord[1][2]) - max(coord[0][0],coord[1][0])) * (min(coord[0][3],coord[1][3]) - max(coord[0][1],coord[1][1]));
    area2 = (min(coord[0][2],coord[2][2]) - max(coord[0][0],coord[2][0])) * (min(coord[0][3],coord[2][3]) - max(coord[0][1],coord[2][1]));   
    area3 = (min(coord[1][2],coord[2][2]) - max(coord[1][0],coord[2][0])) * (min(coord[1][3],coord[2][3]) - max(coord[1][1],coord[2][1]));
    
    // aria totala a desenului
    
    surf = coord[0][4] + coord[1][4] + coord[2][4] + surfI - area1 - area2 - area3;
    
    // perimetrul total al desenului
    
    for ( int j = 0; j < 2; j++ )
            per += 2 * (max(coord[0][j+2],max(coord[1][j+2],coord[2][j+2])) - min(coord[0][j],min(coord[1][j],coord[2][j])));
    
    g << surf << " " << per;
    
    return 0;
}