Cod sursa(job #1497076)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 6 octombrie 2015 00:55:09
Problema Reuniune Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

struct data{

	long long x;
	long long y;
	long long xx;
	long long yy;

}v[5];

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

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

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

	return 1LL * l1 * l2;

}

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

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

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

	return  2 * (l1 + l2);

}

long long sola, solp;

void intersectie(long long a, long long 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;

}