Cod sursa(job #1201393)

Utilizator IulianBoboUAIC Boboc Iulian IulianBobo Data 25 iunie 2014 03:29:17
Problema Reuniune Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>
#include <math.h>
using namespace std;
typedef struct {long long x0,y0,x1,y1;} Triunghi;
int main()
{
	ifstream f("reuniune.in");
	ofstream g("reuniune.out");
	Triunghi tr[3];
	long long min1,min2,max1,max2,perimetru=0,arie=0;
	int comun=0;
	min1=min2=1000000001;
	max1=max2=-1000000001;
	for(int i=0;i<3;i++)
		f>>tr[i].x0>>tr[i].y0>>tr[i].x1>>tr[i].y1;
	for(int i=0;i<3;i++)
	{
		arie=arie+abs(tr[i].x0-tr[i].x1)*abs(tr[i].y0-tr[i].y1);
		perimetru=perimetru+2*(abs(tr[i].x0-tr[i].x1)+abs(tr[i].y0-tr[i].y1));
	}
	for(int i=0;i<2;i++)
		for(int j=i+1;j<3;j++)
		{
			if(tr[j].y1>=tr[i].y0 && tr[j].y1<=tr[i].y1 || tr[j].y0>=tr[i].y0 && tr[j].y0<=tr[i].y1)
				if(tr[j].x0>=tr[i].x0 && tr[j].x0<=tr[i].x1 || tr[j].x1>=tr[i].x0 && tr[j].x1<=tr[i].x1)
				{
					max1=max(tr[i].x0,tr[j].x0);
					max2=max(tr[i].y0,tr[j].y0);
					min1=min(tr[i].x1,tr[j].x1);
					min2=min(tr[i].y1,tr[j].y1);
					arie=arie-abs(max1-min1)*abs(max2-min2);
					perimetru=perimetru-2*(abs(max1-min1)+abs(max2-min2));
					comun++;
				}
		}
	if(comun==3)
	{
		max1=max(max(tr[0].x0,tr[1].x0),tr[2].x0);
		max2=max(max(tr[0].y0,tr[1].y0),tr[2].y0);
		min1=min(min(tr[0].x1,tr[1].x1),tr[2].x1);
		min2=min(min(tr[0].y1,tr[1].y1),tr[2].y1);
		arie=arie+abs(max1-min1)*abs(max2-min2);
		perimetru=perimetru+2*(abs(max1-min1)+abs(max2-min2));
	}
	g<<arie<<" "<<perimetru;
	f.close();
	return 0;
}