Cod sursa(job #131670)

Utilizator c_sebiSebastian Crisan c_sebi Data 4 februarie 2008 12:41:21
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.04 kb
#include <fstream.h>

#define max(a, b) a>=b?a:b
#define min(a, b) a<=b?a:b

struct Punct{
	long long x, y;
} ;

struct DREPTUNGHI{
	Punct SS, DJ;
} a[7];

int intersect (DREPTUNGHI r1, DREPTUNGHI r2){
	return r1.DJ.x>=r2.SS.x && r1.SS.x<=r2.DJ.x &&
			 r1.DJ.y<=r2.SS.y && r1.SS.y>=r2.DJ.y;
}

Punct StangaSus(DREPTUNGHI r1, DREPTUNGHI r2){
	Punct A;
	A.x=max(r1.SS.x, r2.SS.x); A.y = min(r1.SS.y, r2.SS.y);
	return A;
}

Punct DreaptaJos(DREPTUNGHI r1, DREPTUNGHI r2){
	Punct A;
	A.x=min(r1.DJ.x, r2.DJ.x); A.y = max(r1.DJ.y, r2.DJ.y);
	return A;
}

long long Arie(Punct A, Punct B){
	return (B.x-A.x)*(A.y-B.y);
}

long long Perim(Punct A, Punct B){
	return 2*((B.x-A.x)+(A.y-B.y));
}

int main(){
	long long i, x1, y1, x2, y2;
	long long A0, A1, A2, A3, P0, P1, P2, P3;
	ifstream f("reuniune.in");
	ofstream g("reuniune.out");
	for(i=0; i<3; i++){
		f>>x1>>y1>>x2>>y2;
		a[i].SS.x = x1;
		a[i].SS.y = y2;
		a[i].DJ.x = x2;
		a[i].DJ.y = y1;
	}

	if(intersect(a[0], a[1])){
		a[3].SS = StangaSus(a[0], a[1]);
		a[3].DJ = DreaptaJos(a[0], a[1]);
		A0 = Arie(a[3].SS, a[3].DJ);
		P0 = Perim(a[3].SS, a[3].DJ);
	}
	else {
		A0 = 0;
		P0 = 0;
	}


	if(intersect(a[1], a[2])){
		a[4].SS = StangaSus(a[1], a[2]);
		a[4].DJ = DreaptaJos(a[1], a[2]);
		A1 = Arie(a[4].SS, a[4].DJ);
		P1 = Perim(a[4].SS, a[4].DJ);
	}
	else {
		A1 = 0;
		P1 = 0;
	}

	if(intersect(a[0], a[2])){
		a[5].SS = StangaSus(a[0], a[2]);
		a[5].DJ = DreaptaJos(a[0], a[2]);
		A2 = Arie(a[5].SS, a[5].DJ);
		P2 = Perim(a[5].SS, a[5].DJ);
	}
	else {
		A2 = 0;
		P2 = 0;
	}

	if(intersect(a[0], a[1]) && intersect(a[2], a[3])){
		a[6].SS = StangaSus(a[2], a[3]);
		a[6].DJ = DreaptaJos(a[2], a[3]);
		A3 = Arie(a[6].SS, a[6].DJ);
		P3 = Perim(a[6].SS, a[6].DJ);
	}
	else {
		A3 = 0;
		P3 = 0;
	}
 g<<Arie(a[0].SS, a[0].DJ)+Arie(a[1].SS, a[1].DJ)+Arie(a[2].SS, a[2].DJ)-A0-A1-A2+A3<<" "<<Perim(a[0].SS, a[0].DJ)+Perim(a[1].SS, a[1].DJ)+Perim(a[2].SS, a[2].DJ)-P0-P1-P2+P3<<"\n";
 f.close();
 g.close();
 return 0;
}