Cod sursa(job #50405)

Utilizator mika17Mihai Alex Ionescu mika17 Data 7 aprilie 2007 17:21:42
Problema Reuniune Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>
#define fin "reuniune.in"
#define fout "reuniune.in"
#define NMAX 3
struct drept
{
       long long x1,y1,x2,y2;
} dr[NMAX];

long long peri(drept & r)
{
	return 2 * (r.x2-r.x1) + 2 * (r.y2-r.y1);
}

long long arie(drept & r)
{
	return (r.x2-r.x1)*(r.y2-r.y1);
}

drept inters(drept r1,drept r2)
{
	drept d ={0,0,0,0};
	if(r2.x1 >= r1.x2 | r1.x1 >= r2.x2 | r1.y1 >= r2.y2 | r2.y1 >= r1.y2)
		return d;
	d.x1 = r1.x1>r2.x1?r1.x1:r2.x1;
	d.y1 = r1.y1>r2.y1?r1.y1:r2.y1;
	d.x2 = r1.x2<r2.x2?r1.x2:r2.x2;
	d.y2 = r1.y2<r2.y2?r1.y2:r2.y2;
	return d;
}

int main()
{
	drept r12,r13,r23,r;
	freopen(fin,"r",stdin);
	for(int i=0;i<NMAX;++i)
	  scanf("%Ld %Ld %Ld %Ld",&dr[i].x1,&dr[i].y1,&dr[i].x2,&dr[i].y2);
	fclose(stdin);
	r12 = inters(dr[0],dr[1]);
	r13 = inters(dr[0],dr[2]);
	r23 = inters(dr[1],dr[2]);
	r = inters(r12,dr[2]);
	freopen(fout,"w",stdout);
	long long S = arie(dr[0]) + arie(dr[1]) + arie(dr[2]) - arie(r12) - arie(r13) - arie(r23) + arie(r),
	 P = peri(dr[0]) + peri(dr[1]) + peri(dr[2]) - peri(r12) - peri(r13) - peri(r23) + peri(r);
	printf("%Ld %Ld",S,P);
	fclose(stdout);
	return 0;
}