Cod sursa(job #346888)

Utilizator indestructiblecont de teste indestructible Data 9 septembrie 2009 23:26:19
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>
#define N 10
int a[N],b[N],c[N],d[N];
long long suma,arie;
int crd1,crd2,crd3,crd4;
int modul(int a)
{
	if (a<0)
		return a*(-1);
	return a;
}
inline int max(int a,int b)
{
	if (a>b)
		return a;
	return b;
}
inline int min(int a,int b)
{
	if (a<b)
		return a;
	return b;
}
int calcul(int i,int j)
{
	//if (a[i]>c[j] || a[j]>c[i] || b[i]>d[j] || b[j]>d[i])
	//	return 0;
	crd1=max(a[i],a[j]);
	crd2=max(b[i],b[j]);
	crd3=min(c[i],c[j]);
	crd4=min(d[i],d[j]);
	return 1;
}
int main()
{
	freopen("reuniune.in","r",stdin);
	freopen("reuniune.out","w",stdout);
	int i,j,tip=0;
	for (i=1; i<=3; i++)
	{
		scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]);
		suma+=2*(modul(c[i]-a[i])+modul(d[i]-b[i]));
		arie+=modul(c[i]-a[i])*modul(d[i]-b[i]);
	}
	for (i=1; i<=2; i++)
		for (j=i+1; j<=3; j++)
			if (calcul(i,j))
			{
				if (i==1 && j==2)
				{
					a[4]=crd1;b[4]=crd2;c[4]=crd3;d[4]=crd4;
				}
				if (i==1 && j==3)
				{
					a[5]=crd1;b[5]=crd2;c[5]=crd3;d[5]=crd4;
				}
				suma-=2*(modul(crd3-crd1)+modul(crd4-crd2));
				arie-=modul(crd3-crd1)*modul(crd4-crd2);
			}
			else
				tip=1;
	if (!tip && calcul(4,5))
	{
		suma+=2*(modul(crd3-crd1)+modul(crd4-crd2));
		arie+=modul(crd3-crd1)*modul(crd4-crd2);
	}
	printf("%lld ",arie);
	printf("%lld\n",suma);
	return 0;
}