1689D Lena and Matrix (曼哈顿距离转切比雪夫距离/随机化/线段树)

记一道有趣的题:P

题意

这道题很有意思。
给定地图上若干个黑色的点,求这样一个点的坐标,满足其到图中任何一个黑色点的最大曼哈顿距离最小。
max(|axi|+|byi|),i=1,2..k

方法一

曼哈顿距离和且比雪夫距离可以互相转化,曼哈顿转切比雪夫如下:
(x,y)(x+y,xy)
转化后原坐标的曼哈顿距离等价为转化后的切比雪夫距离。也就是:
max(max((Xxi),(Yyi)))
证明详见:https://oi-wiki.org/geometry/distance/
这样就把两个维度拆开了,只要对于x+y,xy分别求最大/最小值,再枚举矩阵上的点打擂台即可。

方法二

随机化的做法是随机500个格子,找出距离它们最远的黑色格子,把这些黑色格子作为“最远点”。再枚举矩阵上所有点求答案。
原理是500个格子找出的黑色格子,极大概率包含方法一中x+y,xy的最大/最小值。

方法三

考虑列数固定的时候,有用的只有最上面的格子和最下面的格子,格子的数量级压缩到了O(m)
按行枚举矩阵上每一个格子,从(i,j)(i,j+1)时,[1,j]列的格子贡献+1,[j+1,m]列的格子贡献-1,线段树区间操作即可。这部分的复杂度是O(nmlogm)
当一行枚举完,挪到下一行开始枚举时,初始化的复杂度是O(m)的,这部分总的复杂度是O(nm),可以接受

posted @   liyishui  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示