Cod sursa(job #498091)

Utilizator newbieFMI - Cristina Andrei newbie Data 4 noiembrie 2010 00:15:00
Problema Reuniune Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.14 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");
    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;
}