Cod sursa(job #356545)

Utilizator TabaraTabara Mihai Tabara Data 15 octombrie 2009 02:33:41
Problema Reuniune Scor 60
Compilator c Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define minim(a,b) ((a)<(b)?(a):(b))
#define maxim(a,b) ((a)>(b)?(a):(b))
#define in "reuniune.in"
#define out "reuniune.out"

double Ax, Ay, Bx, By;
double Cx, Cy, Dx, Dy;
double Ex, Ey, Fx, Fy;

double Ox1, Ox2, Oy1, Oy2;
double Px1, Py1, Px2, Py2;
double aria;
double perim;

int main ( void )
{
	freopen ( in, "r", stdin );
	freopen ( out, "w", stdout );

	scanf ( "%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf", &Ax, &Ay, &Bx, &By, &Cx, &Cy, &Dx, &Dy, &Ex, &Ey, &Fx, &Fy );

	// prima intersectie de dreptunghiuri
	Ox1 = maxim ( Ax, Cx );
	Oy1 = maxim ( Ay, Cy );
	Ox2 = minim ( Bx, Dx );
	Oy2 = minim ( By, Dy );

	// cea de-a doua
	Px1 = maxim ( Ox1, Ex );
	Py1 = maxim ( Oy1, Ey );
	Px2 = minim ( Ox2, Fx );
	Py2 = minim ( Oy2, Fy );

	aria = fabs( Px1-Px2 )*fabs( Py1-Py2 ); // intersectia celor 3
	aria += fabs(Ax-Bx)*fabs(Ay-By); // I
	aria += fabs(Cx-Dx)*fabs(Cy-Dy); // II
	aria += fabs(Ex-Fx)*fabs(Ey-Fy); // III

	perim += 2*( fabs(Px1-Px2) + fabs(Py1-Py2) ); // intersectia celor 3
	perim += 2*( fabs(Ax-Bx) + fabs(Ay-By) ); // I
	perim += 2*( fabs(Cx-Dx) + fabs(Cy-Dy) ); // II
	perim += 2*( fabs(Ex-Fx) + fabs(Ey-Fy) ); // III

	Ox1 = maxim ( Ax, Cx );
	Oy1 = maxim ( Ay, Cy );
	Ox2 = minim ( Bx, Dx );
	Oy2 = minim ( By, Dy );
	aria -= fabs(Ox1-Ox2)*fabs(Oy1-Oy2);
	perim -= 2 * ( fabs(Ox1-Ox2) + fabs(Oy1-Oy2) );

	Ox1 = maxim ( Ax, Ex );
	Oy1 = maxim ( Ay, Ey );
	Ox2 = minim ( Bx, Fx );
	Oy2 = minim ( By, Fy );
	aria -= fabs(Ox1-Ox2)*fabs(Oy1-Oy2);
	perim -= 2 * ( fabs(Ox1-Ox2) + fabs(Oy1-Oy2) );

	Ox1 = maxim ( Cx, Ex );
	Oy1 = maxim ( Cy, Ey );
	Ox2 = minim ( Dx, Fx );
	Oy2 = minim ( Dy, Fy );
	aria -= fabs(Ox1-Ox2)*fabs(Oy1-Oy2);
	perim -= 2 * ( fabs(Ox1-Ox2) + fabs(Oy1-Oy2) );

	printf ( "%.0lf %.0lf\n", aria, perim); // aria


	return 0;
}