农夫约翰决定翻修他的农场以简化其几何形状。
以前,他的牛在两个栅栏围起来的长方形牧场上吃草。
现在,约翰想要用栅栏修建一个新的正方形牧场。
正方形牧场需要覆盖之前两个长方形牧场所包围的全部区域。
请你确定,新修建的正方形牧场的面积最小是多少。
正方形牧场的边应与 xx 轴和 yy 轴平行。
输入格式
第一行包含四个整数 x1,y1,x2,y2x1,y1,x2,y2,表示第一个长方形牧场的左下角坐标 (x1,y1)(x1,y1) 和右上角坐标 (x2,y2)(x2,y2)。
第二行同样包含四个整数 x1,y1,x2,y2x1,y1,x2,y2,表示第二个长方形牧场的左下角坐标 (x1,y1)(x1,y1) 和右上角坐标 (x2,y2)(x2,y2)。
两个牧场之间不会发生重叠或接触。
输出格式
输出能够覆盖之前两个长方形牧场所包围的全部区域的正方形牧场的最小面积。
数据范围
0≤x1<x2≤100≤x1<x2≤10,
0≤y1<y2≤100≤y1<y2≤10
输入样例:
6 6 8 8
1 8 4 9
输出样例:
49
样例解释
在此样例中,想要将两个原始长方形覆盖,一种可行方法是建立左下角坐标为 (1,6)(1,6) 右上角坐标为 (8,13)(8,13) 的边长为 77 的正方形。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a, b, c, d;
int x1,y1,x2,y2;
int dx1 ,dy1,dx2,dy2;
cin >> x1 >> y1 >> x2 >> y2;
cin >> a >> b >> c >> d;
// 计算两边最大的差值
dx1 = min(x1,a),dx2 = max(x2, c);
dy1 = min(y1,b),dy2 = max(y2, d);
// 因为是正方形,所以要取差值最大的一边
cout << pow(max(abs(dx1 - dx2), abs(dy1 - dy2)),2) <<endl;
return 0;
}