Cod sursa(job #657846)

Utilizator idomiralinIdomir Alin idomiralin Data 7 ianuarie 2012 15:38:28
Problema Reuniune Scor 20
Compilator cpp Status done
Runda winners8 Marime 1.46 kb
# include <cstdio>

# define max(a,b) (a > b ? a : b);
# define min(a,b) (a < b ? a : b);

using namespace std;

struct camp
{
       int x0, x1, y0, y1;
}a, b, c;

camp intersectie(camp a, camp b)
{
    camp rez;
    rez.x0 = max(a.x0, b.x0);    rez.y0 = max(a.y0, b.y0);
    rez.x1 = min(a.x1, b.x1);    rez.y1 = min(a.y1, b.y1);
    
   return rez;
}

int arie(camp a)
{
    if (a.x0 < a.x1 && a.y0 < a.y1)
    {
             return (a.x1 - a.x0) * (a.y1 - a.y0);
             }
    return 0;
}

int perimetru(camp a)
{
    if (a.x0 < a.x1 && a.y0 < a.y1)
    {
             return ((a.x1 - a.x0) + (a.y1 - a.y0)) << 1;
             }
    return 0;
}

int p, ar;
int main()
{
    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);
    
    scanf("%d %d %d %d %d %d %d %d %d %d %d %d",&a.x0,&a.y0,&a.x1,&a.y1,&b.x0,&b.y0,&b.x1,&b.y1,&c.x0,&c.y0,&c.x1,&c.y1);

    
    //printf("%d %d %d %d\n",rez1.x0,rez1.y0,rez1.x1,rez1.y1);
    
    ar = arie(a) + arie(b) + arie(c)
       - arie(intersectie(a,b))
       - arie(intersectie(b,c))
       - arie(intersectie(a,c))
       + arie(intersectie(intersectie(a,b),c));
    
    
    p = perimetru(a) + perimetru(b) + perimetru(c)
       - perimetru(intersectie(a,b))
       - perimetru(intersectie(b,c))
       - perimetru(intersectie(a,c))
       + perimetru(intersectie(intersectie(a,b),c));
    
    printf("%d %d",ar,p);
    
return 0;
}