文章目录
- Question
- Ideas
- Code
Question
Farmer John 想要给他的奶牛们建造一个三角形牧场。
有 N 个栅栏柱子分别位于农场的二维平面上不同的点 (X1,Y1)…(XN,YN)。
他可以选择其中三个点组成三角形牧场,只要三角形有一条边与 x 轴平行,且有另一条边与 y 轴平行。
Farmer John 可以围成的牧场的最大面积是多少?
保证存在至少一个合法的三角形牧场。
输入格式
输入的第一行包含整数 N。
以下 N 行每行包含两个整数 Xi 和 Yi,均在范围 −104…104 之内,描述一个栅栏柱子的位置。
输出格式
由于面积不一定为整数,输出栅栏柱子可以围成的合法三角形的最大面积的两倍。
数据范围
3≤N≤100
输入样例:
4
0 0
0 1
1 0
1 2
输出样例:
2
样例解释
位于点 (0,0)、(1,0) 和 (1,2) 的木桩组成了一个面积为 1 的三角形。所以,答案为 2⋅1=2。
只有一个其他的三角形,面积为 0.5。
Ideas
枚举所有点,寻找与其水平方向和竖直方向最远的距离
Code
# 遍历所有点 分别寻找以当前点横坐标和纵坐标为的最大纵坐标之差和最大横坐标之差
# 暴力枚举 O(n^2)
n = int(input())
res = 0
point = []
for i in range(n):
x,y = list(map(int,input().strip().split()))
point.append((x,y))
for i in range(n):
x,y = point[i][0],point[i][1]
dx_max, dy_max = 0, 0
for j in range(n):
if j == i: continue
# 横坐标一样 找最大的dy
if point[j][0] == x:
dy_max = max(dy_max,abs(point[j][1]-y))
# 纵坐标一样 找最大的dx
if point[j][1] == y:
dx_max = max(dx_max,abs(point[j][0]-x))
# print(x,y,dx_max,dy_max)
res = max(res,dx_max*dy_max)
print(res)