Cod sursa(job #484532)

Utilizator loginLogin Iustin Anca login Data 14 septembrie 2010 18:52:58
Problema Reuniune Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.07 kb
# include <fstream>
# include <iostream>
# include <cstdlib>
using namespace std;
struct drpt{
	int x0, y0, y1, x1;
};
drpt a, b, c;
long long int A, P;

long long int dist (int a, int b)
{
	if (a>b)return a-b;
	else return b-a;
}

long long int arie (drpt a)
{
	return dist(a.x0, a.x1)*dist(a.y0, a.y1);
}

long long int perim (drpt a)
{
	return 2*(dist(a.x0, a.x1)+dist(a.y0, a.y1));
}

int in (int x, int y, drpt a)
{
	if (x>a.x0 && x<a.x1 && y>a.y0 && y<a.y1)return 1;
	return 0;
}

void intersect (drpt a, drpt b)
{
	drpt q;
	if (a.x0>=b.x0 && a.x1<=b.x1 && a.y0>=b.y0 && a.y1<=b.y1){
		A-=arie(a);P-=perim(a);return;}
	if (in(a.x0, a.y0, b))
	{
		if (in(a.x0, a.y1, b))
		{
			q.x0=a.x0;q.y0=a.y0;q.x1=a.x1;q.y1=b.y1;			
			A-=arie(q);
			P-=(dist(q.x1, q.x0)+2*(dist(q.y0, q.y1)));
		}
		else if (in (a.x0, a.y1, b))
		{
			q.x0=a.x0;q.y0=a.y0;q.x1=b.x1;q.y1=a.y1;
			A-=arie (q);
			P-=(dist(q.y0, q.y1)+2*(dist(q.x0, q.x1)));
		}
		else
		{
			q.x0=a.x0;q.y0=a.y0;q.x1=b.x1;q.y1=b.y1;
			A-=arie(q);
			P-=(dist(q.x0, q.x1)+dist(q.y0, q.y1));
		}
	}
	else if (in(a.x1, a.y1, b))
	{
		if (in(a.x1, a.y0, b))
		{
			q.x0=b.x0;q.y0=a.y0;q.x1=a.x1;q.y1=a.y1;
			A-=arie (q);
			P-=(dist(q.y1, q.y0)+2*dist(q.x0, q.x1));
		}
		else if (in (a.x0, a.y1, b))
		{
			q.x0=a.x0;q.y0=b.y0;q.x1=a.x1;q.y1=a.y1;
			A-=arie (q);
			P-=(dist(q.x0, q.x1)+2*dist(q.y0, q.y1));
		}
		else
		{
			q.x0=b.x0;q.y0=b.y0;q.x1=a.x1;q.y1=a.y1;
			A-=arie (q);
			P-=(dist(q.x0, q.x1)+dist(q.y0, q.y1));
		}
	}
	else if (in(a.x1, a.y0, b))
	{
		q.x0=b.x0;q.y0=a.y0;q.x1=a.x1;q.y1=b.y1;
		A-=arie (q);
		P-=(dist(q.x0, q.x1)+dist(q.y0, q.y1));
	}
	else if (in (a.x0, a.y1, b))
	{
		q.x0=a.x0;q.y0=b.y0;q.x1=b.x1;q.y1=a.y1;
		A-=arie (q);
		P-=(perim(a)-dist(q.x0, q.x1)-dist(q.y0, q.y1));
	}
}
		
int main ()
{
	ifstream fin ("reuniune.in");
	ofstream fout ("reuniune.out");
	fin>>a.x0>>a.y0>>a.x1>>a.y1;
	A+=arie (a);
	P+=perim(a);
	fin>>b.x0>>b.y0>>b.x1>>b.y1;
	A+=arie (b);
	P+=perim(b);
	intersect(b, a);
	fin>>c.x0>>c.y0>>c.x1>>c.y1;
	A+=arie (c);
	P+=perim(c);
	intersect(c, a);
	intersect(c, b);
	fout<<A<<" "<<P<<endl;
	return 0;
}