Pagini recente » Cod sursa (job #2416568) | Cod sursa (job #81387) | Cod sursa (job #15871) | Cod sursa (job #2470825) | Cod sursa (job #2585787)
#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 1ll * abs(a.end_col - a.start_col) * abs(a.end_lin - a.start_lin);
}
long long calculate_perimeter(coord_rectangle a) {
return 2ll * abs(a.end_col - a.start_col) + 2ll * 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);
x.start_col = min(x.start_col, x.end_col);
x.start_lin = min(x.start_lin, x.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])) << " ";
unsigned long long perimeter = calculate_perimeter(input_data[0]);
perimeter += calculate_perimeter(input_data[1]);
perimeter += calculate_perimeter(input_data[2]);
perimeter -= calculate_perimeter(find_reunion(input_data[0], input_data[1]));
perimeter -= calculate_perimeter(find_reunion(input_data[0], input_data[2]));
perimeter -= calculate_perimeter(find_reunion(input_data[1], input_data[2]));
perimeter += calculate_perimeter(find_reunion(find_reunion(input_data[0], input_data[1]), input_data[2]));
cout << perimeter;
}