Cod sursa(job #723038)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 24 martie 2012 20:19:44
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
#define NMAx 10
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define P(K) (2LL*(D[K].Bx-D[K].Ax+D[K].By-D[K].Ay))
#define A(K) (1LL*(D[K].Bx-D[K].Ax)*(D[K].By-D[K].Ay))
using namespace std;

struct Drept{int Ax,Ay,Bx,By;}D[NMAx],Null;
int Nr=3;

void Intersect(int i,int j) {
	
	++Nr;
	D[Nr].Ax=max(D[i].Ax,D[j].Ax);
	D[Nr].Ay=max(D[i].Ay,D[j].Ay);
	D[Nr].Bx=min(D[i].Bx,D[j].Bx);
	D[Nr].By=min(D[i].By,D[j].By);
	
	if(D[Nr].Ax>D[Nr].Bx||D[Nr].Ay>D[Nr].By)
		D[Nr]=Null;
	
}
int main() {
	
	ifstream in("reuniune.in");
	ofstream out("reuniune.out");
	
	for(int i=1;i<=3;i++)
		in>>D[i].Ax>>D[i].Ay>>D[i].Bx>>D[i].By;
	
	Intersect(1,2);
	Intersect(2,3);
	Intersect(1,3);
	Intersect(1,5);
	
	out<<(A(1)+A(2)+A(3)-A(4)-A(5)-A(6)+A(7))<<' ';
	out<<(P(1)+P(2)+P(3)-P(4)-P(5)-P(6)+P(7))<<'\n';
	
	in.close();
	out.close();
	
	return 0;
	
}