Cod sursa(job #1842143)

Utilizator robx12lnLinca Robert robx12ln Data 6 ianuarie 2017 15:52:39
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include<fstream>
using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
long long aria, perimetru;
struct dreptunghi{
    int xmin;
    int ymin;
    int xmax;
    int ymax;
} a, b, c;
long long A( dreptunghi n ){
    return 1LL * ( n.ymax - n.ymin ) * ( n.xmax - n.xmin );
}
long long P( dreptunghi n ){
    return 2LL * ( ( n.ymax - n.ymin ) + ( n.xmax - n.xmin ) );
}
dreptunghi intersect( dreptunghi x, dreptunghi y ){
    dreptunghi z;
    z.xmin = max( x.xmin, y.xmin );
    z.ymin = max( x.ymin, y.ymin );
    z.xmax = min( x.xmax, y.xmax );
    z.ymax = min( x.ymax, y.ymax );
    if( z.xmin > z.xmax || z.ymin > z.ymax ){
        z.xmin = z.xmax = z.ymax = z.ymin = 0;
    }
    return z;
}
int main(){
    fin >> a.xmin >> a.ymin >> a.xmax >> a.ymax;
    fin >> b.xmin >> b.ymin >> b.xmax >> b.ymax;
    fin >> c.xmin >> c.ymin >> c.xmax >> c.ymax;
    aria = A( a ) + A( b ) + A( c );
    perimetru = P( a ) + P( b ) + P( c );
    aria -= A( intersect( a, b ) );
    perimetru -= P( intersect( a, b ) );
    aria -= A( intersect( a, c ) );
    perimetru -= P( intersect( a, c ) );
    aria -= A( intersect( b, c ) );
    perimetru -= P( intersect( b, c ) );
    aria += A( intersect( b, intersect( a, c ) ) );
    perimetru += P( intersect( b, intersect( a, c ) ) );
    fout << aria << " " << perimetru;
    return 0;
}