Cod sursa(job #2194989)

Utilizator mihai50000Mihai-Cristian Popescu mihai50000 Data 14 aprilie 2018 20:40:06
Problema Reuniune Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.51 kb
#include <fstream>
using namespace std;
ifstream f("reuniune.in");
ofstream g("reuniune.out");

long long arie, perimetru;

struct 
{
	pair <long long, long long> P2, P4; 
}D1, D2, D3, D4;

void Citire()
{
	f >> D1.P4.first;
	f >> D1.P4.second;
	f >> D1.P2.first;
	f >> D1.P2.second;
	f >> D2.P4.first;
	f >> D2.P4.second;
	f >> D2.P2.first;
	f >> D2.P2.second;
	f >> D3.P4.first;
	f >> D3.P4.second;
	f >> D3.P2.first;
	f >> D3.P2.second;
	D4.P2.first = D1.P2.first;
	D4.P2.second = D1.P2.second;
	D4.P4.first = D1.P4.first;
	D4.P4.second = D1.P4.second;
}

long long get_max(long long a, long long b)
{
	if(a > b)
		return a;
	return b;
}

long long get_min(long long a, long long b)
{
	if(a > b)
		return b;
	return a;
}

void INTERSECTIE1()
{
	if(D1.P4.first >= D2.P2.first)
	{
		return;
	}
	if(D1.P2.first <= D2.P4.first)
	{
		return;
	}
	if(D1.P2.second <= D2.P4.second)
	{
		return;
	}
	if(D1.P4.second >= D2.P2.second)
	{
		return;
	}
	D1.P2.first = get_min(D1.P2.first, D2.P2.first);
	D1.P2.second = get_min(D1.P2.second, D2.P2.second);
	D1.P4.first = get_max(D1.P4.first, D2.P4.first);
	D1.P4.second = get_max(D1.P4.second, D2.P4.second);
	arie -= (D1.P2.first - D1.P4.first) * (D1.P2.second - D1.P4.second);
	perimetru -= ((D1.P2.first - D1.P4.first) * 2 + (D1.P2.second - D1.P4.second) * 2);
}

void INTERSECTIE2()
{
	if(D2.P4.first >= D3.P2.first)
	{
		return;
	}
	if(D2.P2.first <= D3.P4.first)
	{
		return;
	}
	if(D2.P2.second <= D3.P4.second)
	{
		return;
	}
	if(D2.P4.second >= D3.P2.second)
	{
		return;
	}
	D2.P2.first = get_min(D2.P2.first, D3.P2.first);
	D2.P2.second = get_min(D2.P2.second, D3.P2.second);
	D2.P4.first = get_max(D2.P4.first, D3.P4.first);
	D2.P4.second = get_max(D2.P4.second, D3.P4.second);
	arie -= (D2.P2.first - D2.P4.first) * (D2.P2.second - D2.P4.second);
	perimetru -= ((D2.P2.first - D2.P4.first) * 2 + (D2.P2.second - D2.P4.second) * 2);
}

void INTERSECTIE3()
{
	if(D4.P4.first >= D3.P2.first)
	{
		return;
	}
	if(D4.P2.first <= D3.P4.first)
	{
		return;
	}
	if(D4.P2.second <= D3.P4.second)
	{
		return;
	}
	if(D4.P4.second >= D3.P2.second)
	{
		return;
	}
	D4.P2.first = get_min(D4.P2.first, D3.P2.first);
	D4.P2.second = get_min(D4.P2.second, D3.P2.second);
	D4.P4.first = get_max(D4.P4.first, D3.P4.first);
	D4.P4.second = get_max(D4.P4.second, D3.P4.second);
	arie -= (D4.P2.first - D4.P4.first) * (D4.P2.second - D4.P4.second);
	perimetru -= ((D4.P2.first - D4.P4.first) * 2 + (D4.P2.second - D4.P4.second) * 2); 
}

void INTERSECTIE4()
{
	if(D1.P4.first >= D3.P2.first)
	{
		return;
	}
	if(D1.P2.first <= D3.P4.first)
	{
		return;
	}
	if(D1.P2.second <= D3.P4.second)
	{
		return;
	}
	if(D1.P4.second >= D3.P2.second)
	{
		return;
	}
	D1.P2.first = get_min(D1.P2.first, D3.P2.first);
	D1.P2.second = get_min(D1.P2.second, D3.P2.second);
	D1.P4.first = get_max(D1.P4.first, D3.P4.first);
	D1.P4.second = get_max(D1.P4.second, D3.P4.second);
	arie += (D1.P2.first - D1.P4.first) * (D1.P2.second - D1.P4.second);
	perimetru += (D1.P2.first - D1.P4.first) * 2 + (D1.P2.second - D1.P4.second) * 2;
}

int main()
{
	Citire();
	arie = (D1.P2.first - D1.P4.first) * (D1.P2.second - D1.P4.second) + (D2.P2.first - D2.P4.first) * (D2.P2.second - D2.P4.second) + (D3.P2.first - D3.P4.first) * (D3.P2.second - D3.P4.second);
	perimetru = (D1.P2.first - D1.P4.first) * 2 + (D1.P2.second - D1.P4.second) * 2 + (D2.P2.first - D2.P4.first) * 2 + (D2.P2.second - D2.P4.second) * 2 + (D3.P2.first - D3.P4.first) * 2 + (D3.P2.second - D3.P4.second) * 2;
	INTERSECTIE1();
	INTERSECTIE2();
	INTERSECTIE3();
	INTERSECTIE4();
	g << arie << " ";
	g << perimetru;
}