812. 方形牧场
农夫约翰决定翻修他的农场以简化其几何形状。
以前,他的牛在两个栅栏围起来的长方形牧场上吃草。
现在,约翰想要用栅栏修建一个新的正方形牧场。
正方形牧场需要覆盖之前两个长方形牧场所包围的全部区域。
请你确定,新修建的正方形牧场的面积最小是多少。
正方形牧场的边应与 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 的正方形。
理解题意:
目的:找到一个能框住两个矩形的正方形
步骤:
(1)在两个方向下(x轴方向,y轴方向)找到最小的距离x1,y1;和最大的距离x2,y2;
(2)算出两个方向中最大的距离差值(就是选出x2-x1,y2-y1两项中最大的一项)
(3)算出平方
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[4],b[4];
int x1,x2,y1,y2;
for(int i=0;i<4;i++)cin>>a[i];
for(int i=0;i<4;i++)cin>>b[i];
//步骤(1)
x1=min(min(a[0],a[2]),min(b[0],b[2]));
y1=min(min(a[1],a[3]),min(b[1],b[3]));
x2=max(max(a[0],a[2]),max(b[0],b[2]));
y2=max(max(a[1],a[3]),max(b[1],b[3]));
//步骤(2)
int r=max(x2-x1,y2-y1);
//步骤(3)
cout<<r*r;
return 0;
}
代码缩减一下变异一下
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
int a[4],b[4];
for(int i=0;i<4;i++)cin>>a[i];
for(int i=0;i<4;i++)cin>>b[i];
cout<<pow(max(max(max(a[0],a[2]),max(b[0],b[2]))-min(min(a[0],a[2]),min(b[0],b[2])),max(max(a[1],a[3]),max(b[1],b[3]))-min(min(a[1],a[3]),min(b[1],b[3]))),2);
}