Cod sursa(job #803608)

Utilizator tibi9876Marin Tiberiu tibi9876 Data 27 octombrie 2012 21:44:47
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<fstream>
#include<algorithm>
using namespace std;

struct drept
{
	long long x,y,z,t;
};

drept a[10];
long long i,ar,pe,p,q;

void sw(int k)
{
	if (a[k].x>a[k].z)
		swap(a[k].x,a[k].z);
	if (a[k].y>a[k].t)
		swap(a[k].y,a[k].t);
}

void proc(long long x,long long y,long long z,long long t)
{
	long long a[5];
	a[1]=x;a[2]=y;a[3]=z;a[4]=t;
	sort(a+1,a+5);
	p=a[2];q=a[3];
}	

void inter(int x,int y,int z)
{
	if ((a[x].t<a[y].y) || (a[y].t<a[x].y) || (a[x].z<a[y].x) || (a[y].z<a[x].x))
		a[z].x=a[z].y=a[z].z=a[z].t=0;
	else 
	{
		proc(a[x].x,a[x].z,a[y].x,a[y].z);
		a[z].x=p;a[z].z=q;
		proc(a[x].y,a[x].t,a[y].y,a[y].t);
		a[z].y=p;a[z].t=q;
		sw(z);
	}
}

long long aria(int k)
{
	return (a[k].z-a[k].x)*(a[k].t-a[k].y);
}

long long per(int k)
{
	return (a[k].z-a[k].x)+(a[k].t-a[k].y);
}
		
int main()
{
	ifstream f("reuniune.in");
	ofstream g("reuniune.out");
	for (i=1;i<=3;i++)
	{
		f >> a[i].x >> a[i].y >> a[i].z >> a[i].t;
		sw(i);
	}
	inter(1,2,4);
	inter(1,3,5);
	inter(2,3,6);
	inter(4,5,0);
	for (i=0;i<=3;i++)
	{
		ar+=aria(i);
		pe+=per(i);
	}
	for (i=4;i<=6;i++)
	{
		ar-=aria(i);
		pe-=per(i);
	}
	g << ar << ' ' <<  2*pe;
	return 0;
}