Cod sursa(job #1497073)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 6 octombrie 2015 00:50:05
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

struct data{

	int x;
	int y;
	int xx;
	int yy;

}v[5];

int sol;

int arie(int x, int y, int xx, int yy) {

	if (xx <= x || yy <= y)
		return 0;

	int l1 = xx - x;
	int l2 = yy - y;

	return 1LL * l1 * l2;

}

int perimetru(int x, int y, int xx, int yy){

	if (xx <= x || yy <= y)
		return 0;

	int l1 = xx - x;
	int l2 = yy - y;

	return  2 * (l1 + l2);

}

int sola, solp;

void intersectie(int a, int b){

	data sol;

	sol.x = max(v[a].x, v[b].x);
	sol.xx = min(v[a].xx, v[b].xx);
	sol.y = max(v[a].y, v[b].y);
	sol.yy = min(v[a].yy, v[b].yy);

	solp -= perimetru(sol.x, sol.y, sol.xx, sol.yy);
	sola -= arie(sol.x, sol.y, sol.xx, sol.yy);

}

void intersectie2() {
	
	data sol;

	sol.x = max(v[1].x, v[2].x);
	sol.xx = min(v[1].xx, v[2].xx);
	sol.y = max(v[1].y, v[2].y);
	sol.yy = min(v[1].yy, v[2].yy);

	sol.x = max(sol.x, v[3].x);
	sol.xx = min(sol.xx, v[3].xx);
	sol.y = max(sol.y, v[3].y);
	sol.yy = min(sol.yy, v[3].yy);

	solp += perimetru(sol.x, sol.y, sol.xx, sol.yy);
	sola += arie(sol.x, sol.y, sol.xx, sol.yy);

}

int main() {

	for (int i = 1; i <= 3; i++) {

		fin >> v[i].x >> v[i].y >> v[i].xx >> v[i].yy;

		solp += perimetru(v[i].x, v[i].y, v[i].xx, v[i].yy);
		sola += arie(v[i].x, v[i].y, v[i].xx, v[i].yy);

	}

	intersectie(1, 2);
	intersectie(1, 3);
	intersectie(2, 3);

	intersectie2();

	fout << sola << " " << solp << "\n";

	return 0;

}