Cod sursa(job #331663)

Utilizator indestructiblecont de teste indestructible Data 14 iulie 2009 21:59:03
Problema Reuniune Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 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;
	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++)
	{
		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;
	}
	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;
}