Cod sursa(job #1447941)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 5 iunie 2015 20:10:04
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
using namespace std;

struct dreptunghi{
	int xm, xM, ym, yM; };

constexpr int arie(const dreptunghi& d){
	return (d.xm < d.xM && d.ym < d.yM) ? (d.xM-d.xm)*(d.yM-d.ym) : 0; }

constexpr int perimetru(const dreptunghi& d){
	return (d.xm <= d.xM && d.ym < d.yM) ? 2*(d.xM-d.xm + d.yM-d.ym) : 0; }

dreptunghi intersect(const dreptunghi& a, const dreptunghi& b){
	return dreptunghi{max(a.xm, b.xm), min(a.xM, b.xM), max(a.ym, b.ym), min(a.yM, b.yM)}; }

ifstream& operator>>(ifstream& f, dreptunghi& dr){
	f >> dr.xm >> dr.ym >> dr.xM >> dr.yM;
	return f; }

int main(){
	ifstream f("reuniune.in");
	dreptunghi a, b, c;
	f >> a >> b >> c;
	dreptunghi ab = intersect(a, b),
		bc = intersect(b, c),
		ac = intersect(a, c),
		abc = intersect(ab, c);
	ofstream g("reuniune.out");
	g << arie(a) + arie(b) + arie(c) - arie(ab) - arie(bc) - arie(ac) + arie(abc) << ' ' <<
		perimetru(a) + perimetru(b) + perimetru(c) - perimetru(ab) - perimetru(bc) - perimetru(ac)
		+ perimetru(abc);
	return 0; }