Cod sursa(job #2123255)

Utilizator shantih1Alex S Hill shantih1 Data 5 februarie 2018 22:59:53
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <iostream>
#include <fstream>
#define ll long long
using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
ll rza,rzp,peri,arie,p1,p2,p3,a1,a2,a3;
struct rect
{  ll lx,ly,rx,ry;	} d,d1,d2,d3,aux;
void inter (rect a,rect b)
{
	if(b.ly<a.ry&&b.rx>a.lx&&b.lx<a.rx)
	{
		ll l1=0,l2=0;
		if(b.lx<=a.lx)
		{
			if(b.ry>a.ry)	l1=abs(a.ry-b.ly);
			if(b.ry<=a.ry)	l1=abs(b.ry-b.ly);
			d.lx=a.lx;		d.ly=b.ly;
			if(b.rx>a.rx)	l2=abs(a.rx-a.lx);
			if(b.rx<=a.rx)	l2=abs(b.rx-a.lx);
		}
		if(b.lx>a.lx)
		{
			if(b.ry>a.ry)	l1=abs(a.ry-b.ly);
			if(b.ry<=a.ry)	l1=abs(b.ry-b.ly);
			d.lx=b.lx;	d.ly=b.ly;
			if(b.rx>a.rx)	l2=abs(a.rx-b.lx);
			if(b.rx<=a.rx)	l2=abs(b.rx-b.lx);
		}
		d.rx=min(b.rx,a.rx);
		d.ry=min(b.ry,a.ry);
		arie=l1*l2;
		peri=2*l1+2*l2;
	}
	else
	{	
		arie=0;	peri=0;
		if(b.rx==a.lx)	peri+=2*(abs(min(a.ry,b.ry)-max(a.ly,b.ly)));
		if(b.ly==a.ry)	peri+=2*(abs(min(a.rx,b.rx)-max(a.lx,b.lx)));
		if(b.lx==a.rx)	peri+=2*(abs(min(a.ry,b.ry)-max(a.ly,b.ly)));
	}
}
int main () {
	
	fin>>d1.lx>>d1.ly>>d1.rx>>d1.ry;
	fin>>d2.lx>>d2.ly>>d2.rx>>d2.ry;
	fin>>d3.lx>>d3.ly>>d3.rx>>d3.ry;
	if(d1.ly>d2.ly)	{	aux=d1;	d1=d2;	d2=aux;		}
	if(d1.ly>d3.ly)	{	aux=d1;	d1=d3;	d3=aux;		}
	if(d2.ly>d3.ly)	{	aux=d2;	d2=d3;	d3=aux;		}
	a1=(d1.rx-d1.lx)*(d1.ry-d1.ly);
	a2=(d2.rx-d2.lx)*(d2.ry-d2.ly);
	a3=(d3.rx-d3.lx)*(d3.ry-d3.ly);
	p1=2*(d1.rx-d1.lx)+2*(d1.ry-d1.ly);
	p2=2*(d2.rx-d2.lx)+2*(d2.ry-d2.ly);
	p3=2*(d3.rx-d3.lx)+2*(d3.ry-d3.ly);
	rza=a1+a2+a3;
	rzp=p1+p2+p3;
	inter(d1,d2);
	rza-=arie;	rzp-=peri;
	inter(d1,d3);
	rza-=arie;	rzp-=peri;
	inter(d2,d3);
	rza-=arie;	rzp-=peri;
	inter(d1,d2);
	if(arie>0)
	{
		inter(d,d3);
		if(arie>0)
		{	rza+=arie;	rzp+=peri;	}
	}
	fout<<rza<<" "<<rzp<<"\n";
}