Cod sursa(job #168685)

Utilizator razvi9Jurca Razvan razvi9 Data 31 martie 2008 18:45:42
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<cstdio>
int m(int a,int b)
{
	if(a<b) return a;
	return b;
}
int M(int a,int b)
{
	if(a<b) return b;
	return a;
}
class d
{
public:
	int x1,x2,y1,y2;
	d()
	{
		x1=x2=y1=y2=0;
	}
	int arie()
	{
		return (x2-x1)*(y2-y1);
	}
	int perimetru()
	{
		return 2*(x2-x1+y2-y1);
	}
	d reuniune(d a)
	{
		d b;
		if(x2<a.x1 || a.x2<x1) return b;
		if(y2<a.y1 || a.y2<a.y1) return b;
		b.x1=M(x1,a.x1);
		b.x2=m(x2,a.x2);
		b.y1=M(y1,a.y1);
		b.y2=m(y2,a.y2);
		return b;
	}
	void read()
	{
		scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
	}
};
int main()
{
	freopen("reuniune.in","r",stdin);
	freopen("reuniune.out","w",stdout);
	d a,b,c;
	a.read();
	b.read();
	c.read();
	int arie=0,perimetru=0;
	arie+=a.arie();
	arie+=b.arie();
	arie+=c.arie();
	arie-=a.reuniune(b).arie();
	arie-=a.reuniune(c).arie();
	arie-=b.reuniune(c).arie();
	arie+=a.reuniune(b.reuniune(c)).arie();
	perimetru+=a.perimetru();
	perimetru+=b.perimetru();
	perimetru+=c.perimetru();
	perimetru-=a.reuniune(b).perimetru();
	perimetru-=b.reuniune(c).perimetru();
	perimetru-=c.reuniune(a).perimetru();
	perimetru+=a.reuniune(b.reuniune(c)).perimetru();
	printf("%d %d",arie,perimetru);
	fclose(stdout);
	return 0;
}