Cod sursa(job #3909)

Utilizator ionescu_bogdanIonescu Bogdan-Gabriel ionescu_bogdan Data 29 decembrie 2006 15:22:24
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <stdio.h>

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

long long x11,x12,y11,y12,x21,x22,y21,y22,x31,x32,y31,y32,abx1,abx2,bcx1,bcx2,acx1,acx2,aby1,aby2,bcy1,bcy2,acy1,acy2,abcx1,abcx2,abcy1,abcy2;

long long a(long long x1,long long y1,long long x2,long long y2)
{
	return (x2-x1)*(y2-y1);
}

long long p(long long x1,long long y1,long long x2,long long y2)
{
	return 2*(x2-x1)+2*(y2-y1);
}

int main()
{
	freopen("reuniune.in","r",stdin);
	freopen("reuniune.out","w",stdout);

	scanf("%lld%lld%lld%lld",&x11,&y11,&x12,&y12);
	scanf("%lld%lld%lld%lld",&x21,&y21,&x22,&y22);
	scanf("%lld%lld%lld%lld",&x31,&y31,&x32,&y32);

	abx1=max(x11,x21);
	bcx1=max(x21,x31);
	acx1=max(x11,x31);

	abx2=min(x12,x22);
	bcx2=min(x22,x32);
	acx2=min(x12,x32);

	abcx1=max(abx1,x31);
	abcx2=min(abx2,x32);

	aby1=max(y11,y21);
	bcy1=max(y21,y31);
	acy1=max(y11,y31);

	aby2=min(y12,y22);
	bcy2=min(y22,y32);
	acy2=min(y12,y32);

	abcy1=max(aby1,y31);
	abcy2=min(aby2,y32);

	if (abx1>abx2||aby1>aby2)
		abx1=abx2=aby1=aby2=0;
	if (bcx1>bcx2||bcy1>bcy2)
		bcx1=bcx2=bcy1=bcy2=0;
	if (acx1>acx2||acy1>acy2)
		acx1=acx2=acy1=acy2=0;
	if (abcx1>abcx2||abcy1>abcy2)
		abcx1=abcx2=abcy1=abcy2=0;
	printf("%lld %lld\n",a(x11,y11,x12,y12)+a(x21,y21,x22,y22)+a(x31,y31,x32,y32)-a(abx1,aby1,abx2,aby2)-a(bcx1,bcy1,bcx2,bcy2)-a(acx1,acy1,acx2,acy2)+a(abcx1,abcy1,abcx2,abcy2),p(x11,y11,x12,y12)+p(x21,y21,x22,y22)+p(x31,y31,x32,y32)-p(abx1,aby1,abx2,aby2)-p(bcx1,bcy1,bcx2,bcy2)-p(acx1,acy1,acx2,acy2)+p(abcx1,abcy1,abcx2,abcy2));

	return 0;
}