Cod sursa(job #166727)

Utilizator scvalexAlexandru Scvortov scvalex Data 28 martie 2008 13:46:55
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

typedef struct {
	int X0, Y0, X1, Y1;
} Dreptunghi;

Dreptunghi d1, d2, d3;

int arie(Dreptunghi d) {
	return (d.X1 - d.X0) * (d.Y1 - d.Y0);
}

int perimetru(Dreptunghi d) {
	return 2*(d.X1 - d.X0) + 
		   2*(d.Y1 - d.Y0);
}

Dreptunghi intersectie(Dreptunghi a, Dreptunghi b) {
	int vah1[] = {a.X0, a.X1, b.X0, b.X1};
	sort(vah1, vah1+ 4);
	int vah2[] = {a.Y0, a.Y1, b.Y0, b.Y1};
	sort(vah2, vah2 + 4);
	Dreptunghi d = {vah1[1], vah2[1], vah1[2], vah2[2]};
	return d;
}

int main(int argc, char *argv[]) {
	ifstream fin("reuniune.in");
	fin >> d1.X0 >> d1.Y0 >> d1.X1 >> d1.Y1;
	fin >> d2.X0 >> d2.Y0 >> d2.X1 >> d2.Y1;
	fin >> d3.X0 >> d3.Y0 >> d3.X1 >> d3.Y1;
	fin.close();

	ofstream fout("reuniune.out");
	fout << arie(d1) + arie(d2) + arie(d3)
			- arie(intersectie(d1, d2)) - arie(intersectie(d2, d3)) - arie(intersectie(d1, d3))
			+ arie(intersectie(intersectie(d1, d2), d3)) << " ";
	fout << perimetru(d1) + perimetru(d2) + perimetru(d3)
			- perimetru(intersectie(d1, d2)) - perimetru(intersectie(d2, d3)) - perimetru(intersectie(d1, d3))
			+ perimetru(intersectie(intersectie(d1, d2), d3)) << endl;
	fout.close();

	return 0;
}