Cod sursa(job #186567)

Utilizator ProtomanAndrei Purice Protoman Data 28 aprilie 2008 12:39:40
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#include <algorithm>
#define lm LONG_MAX
#define n 3

struct punct
{
	long x,y;
} a1[3],a2[3];
long long reza[4],rezp[4],mxx,mxy,mnx,mny,r;

inline long long min(long long a, long long b)
{
	if (a>b)
		return b;
	else return a;
}

inline long long max(long long a, long long b)
{
	if (a>b)
		return a;
	else return b;
}

int main()
{
	freopen("reuniune.in","r",stdin);
	freopen("reuniune.out","w",stdout);
	for (int i=0; i<n; i++)
		scanf("%ld %ld %ld %ld",&a1[i].x,&a1[i].y,&a2[i].x,&a2[i].y);
	for (int i=1; i<1<<n; i++)
	{
		r=0;
		mnx=mny=-lm;
		mxx=mxy=lm;
		long g=i;
		for (int j=0; j<n; j++,g>>=1)
			if (g & 1==1)
			{
				r++;
				mnx=max(mnx,a1[j].x);
				mny=max(mny,a1[j].y);
				mxx=min(mxx,a2[j].x);
				mxy=min(mxy,a2[j].y);
			}
		if (mnx<=mxx && mny<=mxy)
		{
			reza[r]=reza[r]+(mxx-mnx)*(mxy-mny);
			rezp[r]=rezp[r]+(mxx-mnx+mxy-mny)*2;
		}
	}
	reza[0]=reza[1]-reza[2]+reza[3];
	rezp[0]=rezp[1]-rezp[2]+rezp[3];
	printf("%lld %lld",reza[0],rezp[0]);
	fclose(stdin);
	fclose(stdout);
	return 0;
}