[HDU 4785] Exhausted Robot(闵可夫斯基和 + 扫描线)

该博客讨论了一个关于扫地机器人的问题,机器人需要在不与家具相交的情况下清扫房间的最大面积。问题转化为求解多个凸包并集的面积,采用闵可夫斯基和与扫描线算法进行求解,并通过并查集处理关键点的有效长度,以计算清扫区域的面积。博主指出代码实现较为繁琐,可能存在数据问题。
摘要由CSDN通过智能技术生成

题意

给出一个房间(矩形)和 n n n 个家具(凸包) f u r n i t u r e i furniture_i furniturei,再给出一个扫地机器人(凸包) r o b o t robot robot,机器人用它第一个点扫地,但扫地的时候不能和家具有交。机器人可以穿过家具,但穿过的时候不能扫地。问扫地能扫到的最大面积。
其中, n ≤ 20 n\le 20 n20,每个凸包的点数 ≤ 20 \le 20 20,所有点的坐标绝对值不超过 3000 3000 3000

分析

设移动的向量为 α \alpha α,那么对于任意 i i i α ∉ { f u r n i t u r e i − r o b o t } \alpha\notin \{furniture_i-robot\} α/{ furnitureirobot}。其中, { f u r n i t u r e i − r o b o t } \{furniture_i-robot\} { furnitureirobot} 指的是 f u r n i t u r e i furniture_i furniturei − r o b o t -robot robot 的闵可夫斯基和。
那么,最后 α \alpha α 构成的区域,就是一个矩形,剖去 n n n 个凸包后的区域,我们要求这个区域的面积。
我们补集转化一下,现在就是要求 n n n 个凸包并起来的面积,其中 n ≤ 20 n\le 20 n20,每个凸包的点数 ≤ 20 \le 20 20
求解这个问题的思想叫做抠关键点思想。考虑所有的关键点,就是凸包的顶点和凸包和凸包的交点,还有凸包和矩形的交点。然后我们用扫描线扫描这些点,对于相邻的两条扫描线,假设左边那条的有效长度是 f ( l ) f(l) f(l),右边那条的有效长度是 f ( r ) f(r) f(r)。那么这段区域的面积就是 ( f ( l ) + f ( r ) ) ( r − l ) 2 \frac{(f(l)+f(r))(r-l)}{2} 2(f(l)+f(r))(rl)
而关键点的个数最多只有 20 ∗ 20 ∗ 20 = 8000 20*20*20=8000 202020=8000 个左右,因此复杂度很低。
求解有效长度可以通过并查集来求。有一个值得注意的地方,就是只有当一个凸包横穿两条扫描线的时候,才

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值