这篇写的不错:
https://blog.csdn.net/qq_28954601/article/details/71170721
题意
给出五维空间 N
个点的坐标,求其中两点的最大曼哈顿距离。
思路
我们可以定义曼哈顿距离的正式意义为L1-距离或城市区块距离,也就是在欧几里得空间的固定直角坐标系上两点所形成的线段对轴产生的投影的距离总和。
例如在平面上,坐标 (x1,y1) 的点 P1 与坐标 (x2,y2)的点 P2的曼哈顿距离为: |x1−x2|+|y1−y2|
在二维平面中,设距离最远的两点坐标为 (a1,b1) (a2,b2) 则其曼哈顿距离为: |a1−a2|+|b1−b2|
去掉绝对值便有四种形式:
- (a1−a2)+(b1−b2)
- (a1−a2)+(b2−b1)
- (a2−a1)+(b1−b2)
- (a2−a1)+(b2−b1)
可以对上面的式子变形整理一下转化为:
- (a1+b1)−(a2+b2)
- (a1−b1)−(a2−b2)
- (−a1+b1)−(−a2+b2)
- (−a1−b1)−(−a2−b2)
我们发现每一项对应坐标的符号都相同,于是可以假设 1
代表正号, 0
代表负号,于是 (a1+b1) 可以表示为 11
。
要表示空间中所有状态,只需要用 0~1<<dem
的所有二进制便可以啦~
于是对所有的点,求出上面的那四种转化过的形式,记录每种状态的最小值与最大值,枚举找最大差值即可。
总结:
就是一个超级暴力的枚举每种情况的计算吧。。