Cod sursa(job #2585755)

Utilizator antoniu200Alexa Sergiu antoniu200 Data 19 martie 2020 13:14:00
Problema Reuniune Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.13 kb
#include <fstream>
#include <cmath>

using namespace std;

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

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

coord_rectangle make_rectangle(long long start_col, long long start_lin, long long end_col, long long 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((long double)(a.end_col - a.start_col)) * abs((long double)(a.end_lin - a.start_lin));
}

long long calculate_perimeter(coord_rectangle a) {
	return 2 * (abs((long double)(a.end_col - a.start_col)) + abs((long double)(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])) << " ";

	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]));
}