问题描述
无聊的龙随手拿起一张纸,随手画了一个坐标系,随手在坐标系里点点点。然后,他关心一个问题,如果用一个水平放置(不会旋转)的正方形来覆盖这些点点点,这个正方形的面积最小为多少呢?
输入格式
第一行一个整数 n,表示点点的数量。
接下来共 n 行,每行 2 个正整数 (a,b)(a,b),表示该一个点到 X 轴距离为 b,到 Y轴距离为 a,为了方便你统计,程序龙只会在X轴的上方,Y轴的右方画点点。
输入数据保证存在一个合法的正方形(面积非零)去覆盖这些点点。
输出格式
一个整数,表示能覆盖所有点点的最小正方形的面积。
输入数据 1
3
1 1
2 1
2 2
输出数据 1
1
无非就是求x y的差,取那个大的作为边长:
#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;
}
【以下回答由 GPT 生成】
我们可以使用以下步骤来解决这个问题:
下面是具体的实现代码:
#include <iostream>
#include <cmath>
#include <limits>
int main() {
int n;
std::cin >> n;
int minX = std::numeric_limits<int>::max();
int maxY = std::numeric_limits<int>::min();
for (int i = 0; i < n; i++) {
int x, y;
std::cin >> x >> y;
minX = std::min(minX, x);
maxY = std::max(maxY, y);
}
int side = std::max(maxY, minX);
int area = pow(side, 2);
std::cout << area << std::endl;
return 0;
}
这样,我们就可以用C++解决这个问题了。
【相关推荐】