Cod sursa(job #548833)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 7 martie 2011 20:52:25
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
#define min(a,b) ((a<b) ? a:b)
#define max(a,b) ((a>b) ? a:b)

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

int A,P;
point a,b,c;

int arie(point x)
{
	return ((x.x2-x.x1)*(x.y2-x.y1));
}

int perimetru(point x)
{
	return 2*(x.x2-x.x1+x.y2-x.y1);
}

point U(point x,point y)
{
	point q;
	q.x1=max(x.x1,y.x1);
	q.x2=min(x.x2,y.x2);
	q.y1=max(x.y1,y.y1);
	q.y2=min(x.y2,y.y2);
	
	if (q.x1>q.x2||q.y1>q.y2)
		q.x1=q.x2=q.y1=q.y2=0;
	return q;
}

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.x1,&a.y1,&a.x2,&a.y2,&b.x1,&b.y1,&b.x2,&b.y2,&c.x1,&c.y1,&c.x2,&c.y2);
	
	A=arie(a)+arie(b)+arie(c)-arie(U(a,b))-arie(U(a,c))-arie(U(b,c))+arie(U(c,U(a,b)));
	P=perimetru(a)+perimetru(b)+perimetru(c)-perimetru(U(a,b))-perimetru(U(a,c))-perimetru(U(b,c))+perimetru(U(c,U(a,b)));
	
	printf("%d %d\n",A,P);
	return 0;
}