洛谷P3964[TJOI2013]松鼠聚会
主要就是看@Rbu_nas 的题解写的
(那篇题解真的挺明白的了)
题意简述:在 n 个点中找到一个点 x,使其他 n-1 个点到 x 的 切比雪夫距离 之和最小。求距离和的最小值。
什么是切比雪夫距离?
题干中说的那种距离就是切比雪夫距离
更数学一点的描述是:
设两点坐标为:(x1,y1),(x2,y2),则这两点的切比雪夫距离
就是max{|x1-x2| , |y1-y2|}
然后题解又说了一个**”曼哈顿距离“**
这又是啥呢?就是|x1-x2|+|y1-y2|
然后题解说这样求距离快然后就要找这两个距离之间的转化关系:
拆绝对值:|x1-x2|+|y1-y2|
=>max(x1-x2,x2-x1)+max(y1-y2,y2-y1)
=>max((x2-x1)+(y2-y1),(x1-x2)+(y2-y1),(x2-x1)+(y1-y2),
(x1-x2)-(y1-y2)}(两个正的相加肯定比一负一正或者两个负
要大)
然后就是这个东西:
然后再看切比雪夫距离定义,我们发现:
曼哈顿意义下(x1,y1)(x2,y2)之间的距离被转化成了
切比雪夫意义下(x1+y1,x1-y1)*(x2+y2,x2-y2)之间的距离
更一般地,曼哈顿意义下的坐标(x,y)在切比雪夫意义下
即为(x+y,x-y)
反过来,切比雪夫意义下(x,y)对应到曼哈顿意义下则变为
((x+y)/2,(x-y)/2)
为什么曼哈顿距离求和快?
因为可以转成求前缀和
将x那一维的所有数值排序
比xi小的都在xi前面,比xi大的都在xi后面
对于xi前面,都要被xi减去
对于yi后面,都需要把xi减去
然后就是这个东西:
然后维护前缀和就行了
然后就搞定一个紫题
哇~
end