Cod sursa(job #331689)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 14 iulie 2009 23:51:41
Problema Reuniune Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.97 kb
#include <stdio.h>
struct dreptunghi
{
	int a,b,c,d;
};
dreptunghi v[5];
long long arie,perimetru;
long long modul(long long x)
{
	if (x<0)
		return -x;
	return x;
}
int max(int a,int b)
{
	if (a>b)
		return a;
	return b;
}
int min(int a,int b)
{
	if (a<b)
		return a;
	return b;
}
int maxim(int a,int b,int c)
{
	int r=max(a,b);
	return max(r,c);
}
int minim(int a,int b,int c)
{
	int r=min(a,b);
	return min(r,c);
}
int main()
{
	freopen("reuniune.in","r",stdin);
	freopen("reuniune.out","w",stdout);
	int i,crd1,crd2,crd3,crd4,schimbare=0;
	for (i=1; i<=3; i++)
	{
		scanf("%d%d%d%d",&v[i].a,&v[i].b,&v[i].c,&v[i].d);
		arie=(long long)arie+(long long)modul(v[i].c-v[i].a)*modul(v[i].d-v[i].b);
		perimetru=(long long)perimetru+((long long)modul(v[i].c-v[i].a)+modul(v[i].d-v[i].b))*2;
	}
	for (i=2; i<=3; i++)
	{
		if (v[i].a>v[1].c || v[i].c<v[1].a || v[i].b>v[1].d || v[i].d<v[1].b)
		{
			schimbare=1;
			continue;
		}
		crd1=max(v[i].a,v[1].a);
		crd2=max(v[i].b,v[1].b);
		crd3=min(v[i].c,v[1].c);
		crd4=min(v[i].d,v[1].d);
		arie=(long long)arie-(long long)modul(crd3-crd1)*modul(crd4-crd2);
		perimetru=(long long)perimetru-((long long)modul(crd3-crd1)+modul(crd4-crd2))*2;
	}
	if (v[2].a>v[3].c || v[2].c<v[3].a || v[2].b>v[3].d || v[2].d<v[3].b)
			schimbare=1;
	else
	{
		crd1=max(v[2].a,v[3].a);
		crd2=max(v[2].b,v[2].b);
		crd3=min(v[2].c,v[3].c);
		crd4=min(v[2].d,v[4].d);
		arie=(long long)arie-(long long)modul(crd3-crd1)*modul(crd4-crd2);
		perimetru=(long long)perimetru-((long long)modul(crd3-crd1)+modul(crd4-crd2))*2;
	}
	if (schimbare==0)
	{
		crd1=maxim(v[1].a,v[2].a,v[3].a);
		crd2=maxim(v[1].b,v[2].b,v[3].b);
		crd3=minim(v[1].c,v[2].c,v[3].c);
		crd4=minim(v[1].d,v[2].d,v[3].d);
		arie=(long long)arie+(long long)modul(crd3-crd1)*modul(crd4-crd2);
		perimetru=(long long)perimetru+((long long)modul(crd3-crd1)+modul(crd4-crd2))*2;
	}
	printf("%lld ",arie);
	printf("%lld\n",perimetru);
	return 0;
}