Cod sursa(job #1201397)

Utilizator IulianBoboUAIC Boboc Iulian IulianBobo Data 25 iunie 2014 03:45:25
Problema Reuniune Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 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));
				}
		}
		Triunghi a;
		a.x0=max(tr[0].x0,tr[1].x0);
		a.y0=max(tr[0].y0,tr[1].y0);
		a.x1=min(tr[0].x1,tr[1].x1);
		a.y1=min(tr[0].y1,tr[1].y1);
		if(a.x0<=a.x1 && a.y0<=a.y1)
				{
					max1=max(tr[2].x0,a.x0);
					max2=max(tr[2].y0,a.y0);
					min1=min(tr[2].x1,a.x1);
					min2=min(tr[2].y1,a.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;
}