Cod sursa(job #837422)

Utilizator dariusdariusMarian Darius dariusdarius Data 17 decembrie 2012 23:06:53
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
struct MyStruct
{
	int x1,x2,y1,y2;
};

int min(int a,int b) {return a<b?a:b;}
int max(int a,int b) {return a>b?a:b;}
int abs(int a) {return a>0?a:-a;}

int area(MyStruct a)      {return abs(a.x1-a.x2)*abs(a.y1-a.y2);}
int perimeter(MyStruct a) {return 2*(abs(a.x1-a.x2)+abs(a.y1-a.y2));}
MyStruct f(MyStruct a,MyStruct b)
{
	MyStruct c;
	
	c.x1=max(a.x1,b.x1);
	c.y1=max(a.y1,b.y1);
	
	c.x2=min(a.x2,b.x2);
	c.y2=min(a.y2,b.y2);

	if(c.x1>c.x2 || c.y1>c.y2) c.x1=c.x2=c.y1=c.y2=0;
	
	return c;
}
int main()
{
	freopen("reuniune.in","r",stdin);
	freopen("reuniune.out","w",stdout);
	MyStruct a,b,c;
	scanf("%d%d%d%d",&a.x1,&a.y1,&a.x2,&a.y2);
	scanf("%d%d%d%d",&b.x1,&b.y1,&b.x2,&b.y2);
	scanf("%d%d%d%d",&c.x1,&c.y1,&c.x2,&c.y2);
	int S,P;
	S=area(a)+area(b)+area(c);
	S=S-area(f(a,b))-area(f(a,c))-area(f(b,c));
	S=S+area(f(f(a,b),c));
	P=perimeter(a)+perimeter(b)+perimeter(c);
	P=P-perimeter(f(a,b))-perimeter(f(a,c))-perimeter(f(b,c));
	P=P+perimeter(f(f(a,b),c));
	printf("%d %d\n",S,P);
	return 0;
}