Cod sursa(job #485392)

Utilizator bora_marianBora marian bora_marian Data 18 septembrie 2010 11:35:12
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<fstream>
using namespace std;
struct drept{
   int x1,y1;
   int x2,y2;};
long long ariat,perim;
drept A,B,C;
long long int minim(int a,int b);
long long int maxim(int a,int b);
long long int aria(drept A);
drept intersectie(drept A,drept B);
long long int 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)+aria(B)+aria(C)-aria(intersectie(A,B))-aria(intersectie(B,C))-aria(intersectie(A,C))+aria(intersectie(intersectie(A,B),C));
	perim=perimetru(A)+perimetru(B)+perimetru(C)-perimetru(intersectie(A,B))-perimetru(intersectie(B,C))-perimetru(intersectie(A,C))+perimetru(intersectie(intersectie(A,B),C));
	fout<<ariat<<" "<<perim;
	return 0;
}
long long int min (int x, int y)
{
	if (x<y)return x;
	return y;
}

long long int max (long long int x, long long int y)
{
	if (x>y)return x;
	return y;
}

drept intersectie (drept A, drept B)
{
	drept C;
	C.x1=max(A.x1,B.x1);
	C.y1=max(A.y1,B.y1);
	C.x2=min(A.x2,B.x2);
	C.y2=min(A.y2,B.y2);
	if (C.x1>C.x2 || C.y1>C.y2)
		C.x1=C.x2=C.y1=C.y2=0;
	return C;
}

long long int aria (drept A)
{
	return (A.x2-A.x1)*(A.y2-A.y1);
}

long long int perimetru(drept A)
{
	return 2*(A.x2-A.x1+A.y2-A.y1);
}