Cod sursa(job #356544)

Utilizator TabaraTabara Mihai Tabara Data 15 octombrie 2009 02:30:32
Problema Reuniune Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <stdio.h>
#include <stdlib.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"

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

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

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

	scanf ( "%d%d%d%d%d%d%d%d%d%d%d%d", &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 = abs( Px1-Px2 )*abs( Py1-Py2 ); // intersectia celor 3
	aria += abs(Ax-Bx)*abs(Ay-By); // I
	aria += abs(Cx-Dx)*abs(Cy-Dy); // II
	aria += abs(Ex-Fx)*abs(Ey-Fy); // III

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

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

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

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

	printf ( "%d %d\n", aria, perim); // aria


	return 0;
}