Cod sursa(job #2585749)

Utilizator antoniu200Alexa Sergiu antoniu200 Data 19 martie 2020 13:09:01
Problema Reuniune Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.04 kb
#include <fstream>
#include <cmath>

using namespace std;

ifstream cin("reuniune.in");
ofstream cout("reuniune.out");

struct coord_rectangle {
	int start_col, start_lin;
	int end_col, end_lin;
};

coord_rectangle make_rectangle(int start_col, int start_lin, int end_col, int end_lin) {
	coord_rectangle k;
	k.start_col = start_col;
	k.start_lin = start_lin;
	k.end_col = end_col;
	k.end_lin = end_lin;
	return k;
}

istream &operator>>(istream &input, coord_rectangle &a) {
	input >> a.start_col >> a.start_lin >> a.end_col >> a.end_lin;
	return input;
}

long long calculate_area(coord_rectangle a) {
	return abs(a.end_col - a.start_col) * abs(a.end_lin - a.start_lin);
}

long long calculate_perimeter(coord_rectangle a) {
	return 2 * (abs(a.end_col - a.start_col) + abs(a.end_lin - a.start_lin));
}

coord_rectangle find_reunion(coord_rectangle a, coord_rectangle b) {
    coord_rectangle x;
    x.start_col = max(a.start_col, b.start_col);
    x.start_lin = max(a.start_lin, b.start_lin);
    x.end_col = min(a.end_col, b.end_col);
    x.end_lin = min(a.end_lin, b.end_lin);
    return x;
}

int main()
{
	coord_rectangle input_data[3] = {make_rectangle(0, 0, 0, 0)};
	cin >> input_data[0] >> input_data[1] >> input_data[2];

	cout << calculate_area(input_data[0]) + calculate_area(input_data[1]) + calculate_area(input_data[2]) - calculate_area(find_reunion(input_data[0], input_data[1])) - calculate_area(find_reunion(input_data[0], input_data[2])) - calculate_area(find_reunion(input_data[1], input_data[2])) + calculate_area(find_reunion(find_reunion(input_data[0], input_data[1]), input_data[2])) << "\n";

	cout << calculate_perimeter(input_data[0]) + calculate_perimeter(input_data[1]) + calculate_perimeter(input_data[2]) - calculate_perimeter(find_reunion(input_data[0], input_data[1])) - calculate_perimeter(find_reunion(input_data[0], input_data[2])) - calculate_perimeter(find_reunion(input_data[1], input_data[2])) + calculate_perimeter(find_reunion(find_reunion(input_data[0], input_data[1]), input_data[2]));
}