问题描述
无聊的程序龙随手拿起一张纸,随手画了一个坐标系,随手在坐标系里点点点。然后,他关心一个问题,如果用一个水平放置(不会旋转)的正方形来覆盖这些点点点,这个正方形的面积最小为多少呢?
输入格式
第一行一个整数 nn,表示点点的数量。
接下来共 nn 行,每行 2 个正整数 (a,b),表示该一个点到 X 轴距离为 b,到 YY轴距离为 a,为了方便你统计,程序龙只会在X轴的上方,Y轴的右方画点点。
输入数据保证存在一个合法的正方形(面积非零)去覆盖这些点点。
输出格式
一个整数,表示能覆盖所有点点的最小正方形的面积。
输入数据 1
3
1 1
2 1
2 2
输出数据 1
1
运行结果:
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
int x, y;
scanf("%d%d", &x, &y);
int minx = x, maxx = x;
int miny = y, maxy = y;
for (int i = 0; i < n; i++)
{
scanf("%d%d", &x, &y);
if (minx > x) minx = x;
if (miny > y) miny = y;
if (maxx < x) maxx = x;
if (maxy < y) maxy = y;
}
if ((maxy - miny) > (maxx - maxy))
printf("%d", (maxy - miny) * (maxy - miny));
else
printf("%d", (maxx - minx) * (maxx - minx));
return 0;
}
无非就是求x y的差,取那个大的作为边长:
【以下回答由 GPT 生成】
这个问题可以转化为求解点集在X轴和Y轴上的最大距离。因为正方形的对角线会与X轴和Y轴相交,所以点集在X轴和Y轴上的最大距离就是正方形的边长。而正方形的面积就是边长的平方。
具体步骤如下:
下面是用Python实现的代码:
n = int(input())
x_coords = []
y_coords = []
for _ in range(n):
a, b = map(int, input().split())
x_coords.append(a)
y_coords.append(b)
x_coords.sort()
y_coords.sort()
max_x_distance = x_coords[-1] - x_coords[0]
max_y_distance = y_coords[-1] - y_coords[0]
side_length = max(max_x_distance, max_y_distance)
square_area = side_length ** 2
print(square_area)
输出结果为:
1
【相关推荐】