Cod sursa(job #470711)

Utilizator hendrikHendrik Lai hendrik Data 15 iulie 2010 13:03:22
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

#define REP(i,n) for (int i=0;i<(int)(n);i++)
#define N 3
const int oo=(int)2e9;
typedef long long ll;
int x[N],y[N],x1[N],y1[N],xmin,ymin,xmax,ymax,cnt;
ll area,peri;

void open(){
	freopen("reuniune.in","r",stdin);
	freopen("reuniune.out","w",stdout);
}

int main(){
	open();
	REP(i,3){
		scanf("%d%d%d%d",&x[i],&y[i],&x1[i],&y1[i]);
	}
	area=peri=0;
	REP(i,(1<<3)){
		if (i==0) continue;
		xmin=ymin=-oo;
		xmax=ymax=oo;
		cnt=0;
		REP(j,3){
			if (i&(1<<j)){
				cnt++;
				xmin=max(xmin,x[j]);
				ymin=max(ymin,y[j]);
				xmax=min(xmax,x1[j]);
				ymax=min(ymax,y1[j]);
			}
		}
		if (xmin<=xmax && ymin<=ymax){
			if (cnt&1){
				area+=(ll)(xmax-xmin)*(ymax-ymin);
				peri+=(ll)2*(xmax-xmin+ymax-ymin);
			}
			else {
				area-=(ll)(xmax-xmin)*(ymax-ymin);
				peri-=(ll)2*(xmax-xmin+ymax-ymin);
			}
		}
	}
	printf("%lld %lld\n",area,peri);
	//system("pause");
	return 0;
}