Cod sursa(job #493201)

Utilizator ooctavTuchila Octavian ooctav Data 17 octombrie 2010 14:49:38
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include<cstdio>

long long A, P;
struct drept
{
	long long x1, y1, x2, y2;
}d1, d2, d3;	

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()
{
	scanf("%lld%lld%lld%lld", &d1.x1, &d1.y1, &d1.x2, &d1.y2);
	scanf("%lld%lld%lld%lld", &d2.x1, &d2.y1, &d2.x2, &d2.y2);
	scanf("%lld%lld%lld%lld", &d3.x1, &d3.y1, &d3.x2, &d3.y2);
}

drept reun(drept d1, drept d2)
{
	drept d;
	d.x1 = max(d1.x1, d2.x1);
	d.y1 = max(d1.y1, d2.y1);
	d.x2 = min(d1.x2, d2.x2);
	d.y2 = min(d1.y2, d2.y2);
	if(d.x2 < d.x1 || d.y2 < d.y1)
		d.x1 = d.y1 = d.x2 = d.y2 = 0;
	return d;
}

long long arie(drept d)
{
	return((d.x2 - d.x1)*(d.y2 - d.y1));
}

long long perimetru(drept d)
{
	return(2*(d.x2 - d.x1 + d.y2 - d.y1));
}

void rezolva()
{
	A = arie(d1) + arie(d2) + arie(d3) - arie(reun(d1, d2)) - arie(reun(d1, d3)) - arie(reun(d2, d3)) + arie(reun(reun(d1, d2), d3));
	P = perimetru(d1) + perimetru(d2) + perimetru(d3) - perimetru(reun(d1, d2)) - perimetru(reun(d1, d3)) - perimetru(reun(d2, d3)) + perimetru(reun(reun(d1, d2), d3));
} 

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

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