Cod sursa(job #1148577)

Utilizator gabriel.badeaGabriel Badea gabriel.badea Data 20 martie 2014 21:42:42
Problema Reuniune Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include<iostream>
using namespace std;

struct dreptunghi
{
	long long x1;
	long long y1;
	long long x2;
	long long y2;
};

long long perimetru(dreptunghi a)
{
	long long lungime = a.x2 - a.x1;
	long long latime  = a.y2 - a.y1;

	if(lungime * 2 + latime * 2 < 0)
		return 0;
	else
		return lungime * 2 + latime * 2;
}

long long arie(dreptunghi a)
{
	long long lungime = a.x2 - a.x1;
	long long latime  = a.y2 - a.y1;

	if(lungime * latime < 0)
		return 0;
	else 
		return lungime * latime;
}

dreptunghi reuniune(dreptunghi a, dreptunghi b)
{
	dreptunghi c;
	c.x1 = max(a.x1, b.x1);
	c.y1 = max(a.y1, b.y1);
	c.x2 = min(a.x2, b.x2);
	c.y2 = min(a.y2, b.y2);

	if(c.x2 < c.x1 || c.y2 < c.y1)
		c.x1 = c.x2 = c.y1 = c.y2 = 0;

	return c;
}

int main()
{
	freopen("reuniune.in", "r", stdin);
	freopen("reuniune.out", "w", stdout);

	dreptunghi a, b, c;

	scanf("%d%d%d%d", &a.x1, &a.y1, &a.x2, &a.y2);
	scanf("%d%d%d%d", &b.x1, &b.y1, &b.x2, &b.y2);
	scanf("%d%d%d%d", &c.x1, &c.y1, &c.x2, &c.y2);

	dreptunghi reuniune_totala = reuniune(reuniune(a, b), c);

	long long arie_totala = arie(a) + arie(b) + arie(c) - arie(reuniune(a, b)) - arie(reuniune(b, c)) - arie(reuniune(a, c)) + arie(reuniune_totala);
	long long perimetru_total = perimetru(a) + perimetru(b) + perimetru(c) - perimetru(reuniune(a, b)) - perimetru(reuniune(b, c)) - perimetru(reuniune(a, c)) + perimetru(reuniune_totala);

	printf("%lld %lld\n", arie_totala, perimetru_total);

	return 0;
}