文章目录
- Question
- Ideas
- Code
Question
农夫约翰决定翻修他的农场以简化其几何形状。
以前,他的牛在两个栅栏围起来的长方形牧场上吃草。
现在,约翰想要用栅栏修建一个新的正方形牧场。
正方形牧场需要覆盖之前两个长方形牧场所包围的全部区域。
请你确定,新修建的正方形牧场的面积最小是多少。
正方形牧场的边应与 x 轴和 y 轴平行。
输入格式
第一行包含四个整数 x1,y1,x2,y2,表示第一个长方形牧场的左下角坐标 (x1,y1) 和右上角坐标 (x2,y2)。
第二行同样包含四个整数 x1,y1,x2,y2,表示第二个长方形牧场的左下角坐标 (x1,y1) 和右上角坐标 (x2,y2)。
两个牧场之间不会发生重叠或接触。
输出格式
输出能够覆盖之前两个长方形牧场所包围的全部区域的正方形牧场的最小面积。
数据范围
0≤x1<x2≤10,
0≤y1<y2≤10
输入样例:
6 6 8 8
1 8 4 9
输出样例:
49
样例解释
在此样例中,想要将两个原始长方形覆盖,一种可行方法是建立左下角坐标为 (1,6) 右上角坐标为 (8,13) 的边长为 7 的正方形。
Ideas
逆向思维
或者直接找最大横向距离和最大纵向距离之间的最大值
Code
# 启示:正着不行就反着来 正向思路是不断变换正方形的坐标 将四个点框住 难度太大
# 反着来是遍历所有的正方形边长,能把四个点框住就行
lis = []
for i in range(2):
lis.append(list(map(int,input().strip().split())))
for i in range(11):
x1,y1 = min(lis[0][0],lis[1][0]),min(lis[0][1],lis[1][1])
x2,y2 = max(lis[0][2],lis[1][2]),max(lis[0][3],lis[1][3])
if x1+i>=x2 and y1+i>=y2:
print(i*i)
break