Cod sursa(job #1882257)

Utilizator antracodRadu Teodor antracod Data 17 februarie 2017 01:12:02
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("reuniune.in");
ofstream out("reuniune.out");

long long aria,perimetru;

struct figura
{
    int xsus,xjos,ysus,yjos;
} a,b,c;

long long produs(figura p)
{
    return (long long)2*((p.ysus-p.yjos)+(p.xsus-p.xjos));
}
long long arie(figura p)
{
    return (long long)(p.ysus-p.yjos)*(p.xsus-p.xjos);
}
figura intersect( figura x, figura y )
{
    figura z;
    z.xjos = max( x.xjos, y.xjos );
    z.yjos = max( x.yjos, y.yjos );
    z.xsus = min( x.xsus, y.xsus );
    z.ysus = min( x.ysus, y.ysus );
    if( z.xjos > z.xsus || z.yjos > z.ysus )
    {
        z.xjos = z.xsus = z.ysus = z.yjos = 0;
    }
    return z;
}
int main()
{
    in >> a.xjos >> a.yjos >> a.xsus >> a.ysus;
    in >> b.xjos >> b.yjos >> b.xsus >> b.ysus;
    in >> c.xjos >> c.yjos >> c.xsus >> c.ysus;
    aria = arie( a ) + arie( b ) + arie( c );
    perimetru = produs( a ) + produs( b ) + produs( c );
    aria -= arie( intersect( a, b ) );
    perimetru -= produs( intersect( a, b ) );
    aria -= arie( intersect( a, c ) );
    perimetru -= produs( intersect( a, c ) );
    aria -= arie( intersect( b, c ) );
    perimetru -= produs( intersect( b, c ) );
    aria += arie( intersect( b, intersect( a, c ) ) );
    perimetru += produs(
                    intersect( b, intersect( a, c ) ) );
    out << aria << " " << perimetru;
    return 0;
}