0
点赞
收藏
分享

微信扫一扫

农田缩减(寒假每日一题 23)

农夫约翰的 农田缩减(寒假每日一题 23)_#include 头奶牛分布在其二维农场的不同位置。

约翰想用一个长方形的围栏把所有的奶牛围起来,围栏的边需要平行于 农田缩减(寒假每日一题 23)_数据_02 轴和 农田缩减(寒假每日一题 23)_枚举_03 轴。

在能够包含所有奶牛的情况下(处于围栏边界的奶牛也算包含在内),约翰希望围栏围起的面积尽可能小。

不幸的是,由于上个季度的牛奶产量很低,约翰的预算十分紧张。

因此,他希望建立一个更小的围栏,甚至为了实现这一目标,他愿意卖掉农场中的一头奶牛。

请帮助约翰计算,卖掉牛群中的一头奶牛以后,他可以用围栏围起来的最小面积(为剩下的奶牛建造尽可能小的围栏)。

对于这个问题,请将奶牛视为点,将围栏视为四个线段的集合。

注意,答案可以是零,例如,所有剩余的奶牛最终都站在同一条垂直或水平线上。

输入格式
第一行包含整数 农田缩减(寒假每日一题 23)_#include

接下来 农田缩减(寒假每日一题 23)_#include 行,每行包含两个整数 农田缩减(寒假每日一题 23)_i++_06,表示一头牛所在的位置坐标为 农田缩减(寒假每日一题 23)_#include_07

输出格式
输出卖掉牛群中的一头奶牛以后,约翰可以用围栏围起来的最小面积。

数据范围
农田缩减(寒假每日一题 23)_#include_08

输入样例:

4
2 4
1 1
5 2
17 25

输出样例:

12

#include<iostream>
#include<algorithm>

using namespace std;

const int N = 50010;

int n;
int x[N], y[N], a[N], b[N];

int main(){

scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%d%d", &x[i], &y[i]);
a[i] = x[i], b[i] = y[i];
}

sort(a, a + n);
sort(b, b + n);

int res = 2e9;
for(int i = 0; i < n; i++){ // 去掉边界点

int x1, x2, y1, y2;
x1 = x[i] == a[0]? a[1]: a[0];
x2 = x[i] == a[n - 1]? a[n - 2]: a[n - 1];
y1 = y[i] == b[0]? b[1]: b[0];
y2 = y[i] == b[n - 1]? b[n - 2]: b[n - 1];
res = min(res, (x2 - x1) * (y2 - y1));
}

printf("%d\n", res);
return 0;
}


举报

相关推荐

0 条评论