Cod sursa(job #492934)

Utilizator ooctavTuchila Octavian ooctav Data 16 octombrie 2010 14:11:47
Problema Reuniune Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
#include<cstdio>
const int DRMAX = 10;

int NR = 3;
long long x1[DRMAX], y1[DRMAX], x2[DRMAX], y2[DRMAX];
bool NA[DRMAX];
long long A, P;

inline long long min(long long a, long long b)
{
	if(a < b)
		return a;
	return b;
}

inline long long max(long long a, long long b)
{
	if(a > b)
		return a;
	return b;
}

void citire()
{
	for(int i = 1 ; i <= 3 ; i++)
		scanf("%lld%lld%lld%lld", &x1[i], &y1[i], &x2[i], &y2[i]);
}

void coord(int c1, int c2)
{
	x1[++NR] = max(x1[c1], x1[c2]);
	y1[NR] = max(y1[c1], y1[c2]);
	x2[NR] = min(x2[c1], x2[c2]);
	y2[NR] = min(y2[c1], y2[c2]);
}

void rezolva()
{
	for(int i = 1 ; i <= 3 ; i++)
	{
		A += (x2[i] - x1[i])*(y2[i] - y1[i]);
		P += 2*((x2[i] - x1[i])+(y2[i] - y1[i]));
	}
	
	coord(1, 2);
	coord(1, 3);
	coord(2, 3);
	
	for(int i = 4 ; i <= 6 ; i++)
		if(x1[i] >= x2[i] || y1[i] >= y2[i]) 
		{
			NA[i] = true;
			if(x1[i] == x2[i] && y2[i] - y1[i] > 0)
				P -= y2[i] - y1[i];
			else if(y1[i] == y2[i] && x2[i] - x1[i] > 0)
				P -= x2[i] - x1[i];
		}
		else
		{
			A -= (x2[i] - x1[i])*(y2[i] - y1[i]);
			P -=2*((x2[i] - x1[i]) + (y2[i] - y1[i]));
		}
	
	if(!NA[4] && !NA[5] && !NA[6])
	{
		coord(4, 5);
		A += (x2[7] - x1[7])*(y2[7] - y1[7]);
		P += 2*((x2[7] - x1[7]) + (y2[7] - y1[7]));
	}
	
	if(NA[4] && NA[5])
	{
		A -= (x2[1] - x1[1])*(y2[1] - y1[1]);
		P -= 2*((x2[1] - x1[1])+(y2[1] - y1[1]));
	}
	if(NA[4] && NA[6])
	{
		A -= (x2[2] - x1[2])*(y2[2] - y1[2]);
		P -= 2*((x2[2] - x1[2])+(y2[2] - y1[2]));
	}
	if(NA[5] && NA[6])
	{
		A -= (x2[3] - x1[3])*(y2[3] - y1[3]);
		P -= 2*((x2[3] - x1[3])+(y2[3] - y1[3]));
	}
} 

void scrie()
{
	printf("%lld %lld", A, P);
}

int main()
{
	freopen("reuniune.in", "r", stdin);
	freopen("reuniune.out", "w", stdout);
	citire();
	rezolva();
	scrie();
	return 0;
}