#5006. [USACO16OPEN] Fence Reduction B
[USACO16OPEN] Fence Reduction B
题目描述
农夫约翰的N头奶牛(3 ≤ N ≤ 50,000)分布在二维牧场的不同位置。约翰想用平行于x轴和y轴的矩形围栏包围所有奶牛,并希望围栏尽可能小(允许奶牛在边界上)。
由于上季度牛奶产量低,约翰预算紧张。他愿意卖掉一头牛,使得剩下的N-1头牛能被更小的围栏包围。请计算移除一头牛后,剩余牛群的最小包围面积。
注意:
- 奶牛视为点,围栏由四条线段组成
- 答案可能为0(如剩余奶牛在同一直线上)
- 需要考虑算法效率以处理大规模数据
输入格式
第一行:整数N
接下来N行:每行两个整数表示奶牛坐标(1 ≤ x,y ≤ 40,000)
输出格式
一个整数,表示移除一头牛后的最小包围面积
输入输出样例
输入 #1
4
2 4
1 1
5 2
17 25
输出 #1
12
样例解释
原始4头牛的最小包围矩形面积为(17-1)×(25-1)=384
移除最优选择:
- 若移除(2,4):新面积(17-1)×(25-1)=384
- 若移除(1,1):新面积(17-5)×(25-2)=276
- 若移除(5,2):新面积(17-1)×(25-1)=384
- 若移除(17,25):新面积(5-1)×(4-1)=12
因此最优解是移除(17,25),最小面积为12
解题思路
- 预处理所有奶牛的x/y极值(min_x, max_x, min_y, max_y)
- 找出对每个极值贡献最大的奶牛(即移除该牛能最大程度缩小对应边界)
- 检查移除以下四种候选牛后的面积:
- 贡献min_x的牛
- 贡献max_x的牛
- 贡献min_y的牛
- 贡献max_y的牛
- 取这四种情况中的最小面积
时间复杂度:O(N)(只需线性扫描处理极值)