Cod sursa(job #923346)

Utilizator beldeabogdanBogdan Beldea beldeabogdan Data 23 martie 2013 13:40:06
Problema Reuniune Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>
#define maxim(a,b) (a<b)?b:a
#define minim(a,b) (a<b)?a:b
using namespace std;

struct dreptunghi {
	long long x1, y1, x2, y2;
};
dreptunghi a,b,c;

dreptunghi intersectie(dreptunghi a, dreptunghi b) {
    dreptunghi aux;
    aux.x1 = maxim(a.x1,b.x1);
    aux.y1 = maxim(a.y1,b.y1);
    aux.x2 = minim(a.x2,b.x2);
    aux.y2 = minim(a.y2,b.y2);
    if (aux.x1 > aux.x2 || aux.y1 > aux.y2) aux.x1 = aux.y1 = aux.x2 = aux.y2 = 0;
    return aux;
}

long long arie(dreptunghi a) {
    return (a.x2-a.x1) * (a.y2-a.y1);
}

long long per(dreptunghi a) {
    return (a.x2-a.x1+a.y2-a.y1) *2;
}

int main() {
	freopen("reuniune.in","r",stdin);
	freopen("reuniune.out","w",stdout);
    scanf("%lld %lld %lld",&a.x1,&a.y1,&a.x2,&a.y2);
	scanf("%lld %lld %lld",&b.x1,&b.y1,&b.x2,&b.y2);
	scanf("%lld %lld %lld",&c.x1,&c.y1,&c.x2,&c.y2);
	long long suprafata = arie(a) + arie(b) + arie(c);
	suprafata -= arie(intersectie(a,b)) + arie(intersectie(c,b)) + arie(intersectie(a,c));
	suprafata += arie(intersectie(intersectie(a,b),c));
	long long perimetru = per(a) + per(b) + per(c);
	perimetru -= per(intersectie(a,b)) + per(intersectie(c,b)) + per(intersectie(a,c));
	perimetru += per(intersectie(intersectie(a,b),c));
	printf("%lld %lld\n",suprafata,perimetru);
    return 0;
}