方形牧场AcWing

农夫约翰决定翻修他的农场以简化其几何形状。

以前,他的牛在两个栅栏围起来的长方形牧场上吃草。

现在,约翰想要用栅栏修建一个新的正方形牧场。

正方形牧场需要覆盖之前两个长方形牧场所包围的全部区域。

请你确定,新修建的正方形牧场的面积最小是多少。

正方形牧场的边应与 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 的正方形。

源代码

#include <iostream>
using namespace std;
int main()
{
    /*
    小小水题,找四个节点的边界节点,计算边界的长和宽
    若不同则必须按长的走正方形即可
    */
	int x1,y1,x2,y2,x3,y3,x4,y4;
	cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;
	int ans=0;
	int maxx=max(x1,max(x2,max(x3,x4)));
	int minx=min(x1,min(x2,min(x3,x4)));
	int x=maxx-minx;
	int maxy=max(y1,max(y2,max(y3,y4)));
	int miny=min(y1,min(y2,min(y3,y4)));
	int y=maxy-miny;
	if(x>y)ans=x*x;
	else ans=y*y;
	cout<<ans;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/couchpotatoshy/article/details/124525744