Cod sursa(job #1467038)

Utilizator BLz0rDospra Cristian BLz0r Data 2 august 2015 17:17:14
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <cstdio>
#include <algorithm>
using namespace std;

FILE *f = fopen ( "reuniune.in", "r" );
FILE *g = fopen ( "reuniune.out", "w" );

struct Dreptunghi{
    int x1, y1, x2, y2;
};

long long Area ( Dreptunghi A ){
    return 1LL * (A.x2-A.x1) * (A.y2-A.y1);
}

long long Perim ( Dreptunghi A ){
    return 2LL * ( (A.x2-A.x1) + (A.y2-A.y1) );
}

Dreptunghi Reun ( Dreptunghi A, Dreptunghi B ){

    Dreptunghi Nou;

    Nou.x1 = max ( A.x1, B.x1 );
    Nou.x2 = min ( A.x2, B.x2 );
    Nou.y1 = max ( A.y1, B.y1 );
    Nou.y2 = min ( A.y2, B.y2 );

    if ( Nou.x1 > Nou.x2 || Nou.y1 > Nou.y2 )
        Nou.x1 = Nou.y1 = Nou.x2 = Nou.y2 = 0;

    return Nou;
}

int main(){

    long long TotalArea = 0, TotalPerim = 0;
    Dreptunghi A, B, C, T1, T2, T3, T4;

    fscanf ( f, "%d%d%d%d", &A.x1, &A.y1, &A.x2, &A.y2 );
    fscanf ( f, "%d%d%d%d", &B.x1, &B.y1, &B.x2, &B.y2 );
    fscanf ( f, "%d%d%d%d", &C.x1, &C.y1, &C.x2, &C.y2 );

    T1 = Reun(A,B);
    T2 = Reun(A,C);
    T3 = Reun(B,C);
    T4 = Reun(T1,C);

    TotalArea =  Area(A) + Area(B) + Area(C) - Area(T1) - Area(T2) - Area(T3) + Area (T4);

    TotalPerim = Perim(A) + Perim(B) + Perim(C) - Perim(T1) - Perim(T2) - Perim(T3) + Perim(T4);

    fprintf ( g, "%lld %lld", TotalArea, TotalPerim );

    return 0;
}