Cod sursa(job #2530118)

Utilizator david.teacaDavid Stefan Teaca david.teaca Data 24 ianuarie 2020 13:42:52
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 4;
ifstream in("reuniune.in");
ofstream out("reuniune.out");
struct fig {
	long long x, y, x1, y1;
};
fig v[N];
long long total_area = 0, total_perimeter = 0;
fig intersection(fig va, fig vb) {
	fig ans;
	ans.x = max(va.x, vb.x);
	ans.y = max(va.y, vb.y);
	ans.x1 = min(va.x1, vb.x1);
	ans.y1 = min(va.y1, vb.y1);
	if (ans.x > ans.x1 || ans.y > ans.y1) {
		ans = {0, 0, 0, 0};
	}
	return ans;
}
int main() {
	for (int i = 1; i <= 3; i++) {
		in >> v[i].x >> v[i].y >> v[i].x1 >> v[i].y1;
		total_area += (v[i].x1 - v[i].x) * (v[i].y1 - v[i].y);
		total_perimeter += ((v[i].x1 - v[i].x) + (v[i].y1 - v[i].y)) * 2;
	}
	 for (int i = 1; i <= 2; i++) {
		 for (int j = i + 1; j <= 3; j++) {
			 fig a = intersection(v[i], v[j]);
			 total_area -= (a.x1 - a.x) * (a.y1 - a.y);
			 total_perimeter -= ((a.x1 - a.x) + (a.y1 - a.y)) * 2;
		 }
	 }
	 fig a = intersection(intersection(v[1], v[2]), v[3]);
	 total_area += (a.x1 - a.x) * (a.y1 - a.y);
	 total_perimeter += ((a.x1 - a.x) + (a.y1 - a.y)) * 2;
	 out << total_area << " " << total_perimeter << "\n";
	 return 0;
}