Cod sursa(job #485326)

Utilizator bora_marianBora marian bora_marian Data 18 septembrie 2010 01:28:42
Problema Reuniune Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<fstream>
using namespace std;
struct drept{
   int x1,y1;
   int x2,y2;};
long long ariat,perim;
drept A,B,C,D,E,F,G;
int minim(int a,int b);
int maxim(int a,int b);
long long aria(drept A);
drept intersectie(drept A,drept B);
long long perimetru(drept A);
int main()
{
	ifstream fin("reuniune.in");
	ofstream fout("reuniune.out");
	fin>>A.x1>>A.y1>>A.x2>>A.y2;
	fin>>B.x1>>B.y1>>B.x2>>B.y2;
	fin>>C.x1>>C.y1>>C.x2>>C.y2;
	ariat+=aria(A);
	ariat+=aria(B);
	ariat+=aria(C);
	perim=perimetru(A)+perimetru(B)+perimetru(C);
	D=intersectie(A,B);
	E=intersectie(B,C);
	F=intersectie(A,C);
	ariat-=aria(D);
	ariat-=aria(E);
	ariat-=aria(F);
	perim-=perimetru(D);
	perim-=perimetru(E);
	perim-=perimetru(F);
	G=intersectie(D,C);
	perim+=perimetru(G);
	ariat+=aria(G);
	fout<<ariat<<" "<<perim;
	return 0;
}
long long aria(drept A)
{
	long long rez=(A.y2-A.y1)*(A.x2-A.x1);
	return rez;
}
drept intersectie(drept A,drept B)
{
	drept C;
	C.x1=maxim(A.x1,B.x1);
	C.y1=maxim(A.y1,B.y1);
	C.x2=minim(A.x2,B.x2);
	C.y2=minim(A.y2,B.y2);
	return C;
}
int minim(int a,int b)
{
	if(a>b)
		return b;
	else
		return a;
}
int maxim(int a,int b)
{
	if(a>b)
		return a;
	else
		return b;
}
long long perimetru(drept A)
{
	long long rez=(A.x2-A.x1)+(A.y2-A.y2);
	rez*=4;
	return rez;
}