曼哈顿距离
对于 ( x i , y i ) , ( x j , y j ) (x_i,y_i),(x_j,y_j) (xi,yi),(xj,yj),它们的曼哈顿距离为: ∣ x i − x j ∣ + ∣ y i − y j ∣ \left|x_i-x_j \right|+\left|y_i-y_j\right| ∣xi−xj∣+∣yi−yj∣;
最大曼哈顿距离
给定一个包含若干个点的集合,求其中任意两点之间的最大/最小曼哈顿距离;
如果暴力的枚举,就是
O
(
n
2
)
O(n^2)
O(n2);
对于最大曼哈顿距离,注意到:
∣ x i − x j ∣ + ∣ y i − y j ∣ = max ( x i − x j , x j − x i ) + max ( y i − y j , y j − y i ) = max ( x i − x j + y i − y j , x i − x j + y j − y i , x j − x i + y i − y j , x j − x i + y j − y i ) = max ( x i + y i − ( x j + y j ) , x i − y i − ( x j − y j ) , x j − y j − ( x i − y i ) , x j + y j − ( x i + y i ) ) = max ( ∣ x i + y i − ( x j + y j ) ∣ , ∣ x i − y i − ( x j − y j ) ∣ ) = max ( max ( x i + y i ) − min ( x j + y j ) , max ( x i − y i ) − min ( x j − y j ) ) \begin{aligned} \left|x_i-x_j \right|+\left|y_i-y_j\right| &=\max(x_i-x_j,x_j-x_i)+\max(y_i-y_j,y_j-y_i)\\ &=\max(x_i-x_j+y_i-y_j,x_i-x_j+y_j-y_i,x_j-x_i+y_i-y_j,x_j-x_i+y_j-y_i)\\ &=\max(x_i+y_i-(x_j+y_j),x_i-y_i-(x_j-y_j),x_j-y_j-(x_i-y_i),x_j+y_j-(x_i+y_i))\\ &=\max(|x_i+y_i-(x_j+y_j)|,|x_i-y_i-(x_j-y_j)|)\\ &=\max(\max(x_i+y_i)-\min(x_j+y_j),\max(x_i-y_i)-\min(x_j-y_j)) \end{aligned} ∣xi−xj∣+∣yi−yj∣=max(xi−xj,xj−xi)+max(yi−yj,yj−yi)=max(xi−xj+yi−yj,xi−xj+yj−yi,xj−xi+yi−yj,xj−xi+yj−yi)=max(xi+yi−(xj+yj),xi−yi−(xj−yj),xj−yj−(xi−yi),xj+yj−(xi+yi))=max(∣xi+yi−(xj+yj)∣,∣xi−yi−(xj−yj)∣)=max(max(xi+yi)−min(xj+yj),max(xi−yi)−min(xj−yj))
简单的说,曼哈顿距离的情况很多,但都可以归类为 ∣ x i + y i − ( x j + y j ) ∣ |x_i+y_i-(x_j+y_j)| ∣xi+yi−(xj+yj)∣或 ∣ x i − y i − ( x j − y j ) ∣ |x_i-y_i-(x_j-y_j)| ∣xi−yi−(xj−yj)∣,而这两个很好求,处理一下后,拿最大值减最小值;
例: Dist MAX \text{Dist MAX} Dist MAX
n = int(input())
t1 = []
t2 = []
for i in range(n):
x, y = map(int, input().split())
t1.append(x - y)
t2.append(x + y)
t1.sort()
t2.sort()
print(max(t1[-1] - t1[0], t2[-1] - t2[0]))