Cod sursa(job #575366)

Utilizator ChallengeMurtaza Alexandru Challenge Data 8 aprilie 2011 10:54:00
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>

using namespace std;

const char InFile[]="reuniune.in";
const char OutFile[]="reuniune.out";

ifstream fin(InFile);
ofstream fout(OutFile);

struct s_AABB
{
	long long xmin,xmax,ymin,ymax;
};

long long a,p;
s_AABB A,B,C;

inline s_AABB intersectie(s_AABB a, s_AABB b)
{
	s_AABB c;
	c.xmin=max(a.xmin,b.xmin);
	c.xmax=min(a.xmax,b.xmax);
	c.ymin=max(a.ymin,b.ymin);
	c.ymax=min(a.ymax,b.ymax);
	return c;
}

inline long long arie(s_AABB a)
{
	if(a.xmin<=a.xmax && a.ymin<=a.ymax)
	{
		return (a.xmax-a.xmin)*(a.ymax-a.ymin);
	}
	return 0;
}

inline long long perimetru(s_AABB a)
{
	if(a.xmin<=a.xmax && a.ymin<=a.ymax)
	{
		return (((a.xmax-a.xmin)+(a.ymax-a.ymin))<<1);
	}
	return 0;
}

int main()
{
	fin>>A.xmin>>A.ymin>>A.xmax>>A.ymax;
	fin>>B.xmin>>B.ymin>>B.xmax>>B.ymax;
	fin>>C.xmin>>C.ymin>>C.xmax>>C.ymax;
	fin.close();
	
	a=arie(A)+arie(B)+arie(C)
	-arie(intersectie(A,B))
	-arie(intersectie(B,C))
	-arie(intersectie(C,A))
	+arie(intersectie(intersectie(A,B),C));
	p=perimetru(A)+perimetru(B)+perimetru(C)
	-perimetru(intersectie(A,B))
	-perimetru(intersectie(B,C))
	-perimetru(intersectie(C,A))
	+perimetru(intersectie(intersectie(A,B),C));
	
	fout<<a<<" "<<p;
	fout.close();
	return 0;
}