Cod sursa(job #1934950)

Utilizator flibiaVisanu Cristian flibia Data 21 martie 2017 21:55:15
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>
#define ll long long

using namespace std;

ifstream in("reuniune.in");
ofstream out("reuniune.out");

struct my{
	ll a1, a2, b1, b2;
};

my A, B, C; ll area, peri;

ll getb(my x){
	return 2 * (x.b2 - x.b1 + x.a2 - x.a1);
}

ll geta(my x){
	return (x.b2 - x.b1) * (x.a2 - x.a1);
}

my cross(my x, my y){
	my p;
	p.b2 = min(x.b2, y.b2);
	p.b1 = max(x.b1, y.b1);
	p.a2 = min(x.a2, y.a2);
	p.a1 = max(x.a1, y.a1);
	if(p.a1 > p.a2 || p.b1 > p.b2) 
		p.a1 = p.a2 = p.b1 = p.b2 = 0;
	return p;
}

int main(){
	in >> A.a1 >> A.b1 >> A.a2 >> A.b2;
	in >> B.a1 >> B.b1 >> B.a2 >> B.b2;
	in >> C.a1 >> C.b1 >> C.a2 >> C.b2;
	area = geta(A) + geta(B) + geta(C) - geta(cross(A, B)) - geta(cross(A, C)) - geta(cross(B, C)) + geta(cross(A, cross(B, C)));
	peri = getb(A) + getb(B) + getb(C) - getb(cross(A, B)) - getb(cross(A, C)) - getb(cross(B, C)) + getb(cross(A, cross(B, C))); 
	out << area << ' ' << peri;
	return 0;
}