2021牛客暑期多校训练营6 H. Hopping Rabbit(扫描线)

Hopping Rabbit

https://ac.nowcoder.com/acm/contest/11257/H

Description

一只兔子在草原上跳来跳去,草原上有猎人布下的n个陷阱.现在将草原看作一个二维直角坐标系,兔子看作一个点,陷阱看作一个矩阵(且它的边必定与x轴或y轴平行),兔子每次会沿x轴或y轴方向移动距离d(即如果兔子在,它跳一次后在四个点中的一个.问在坐标系中是否存在一个点,使兔子无论怎么跳都不会掉进陷阱.

Solution

扫描线裸题,由于兔子的运动具有周期性,只能在 上,不妨把所有矩形都平移到 的平面上,然后利用扫描线对每个 进行扫描,如果存在一个 ,在这一行中有点没有被覆盖,那么就可以选取这个点。
以下图来自官方题解,如图所示:
图片说明
图片说明
注意到有一些矩形可能很大,或者可能在平移的时候被分割成多个矩形,分类讨论一下就可以了, 方向上可能被截成两部分, 方向同理,于是最多会被分成4个矩形。
剩下的就需要学习扫描线,使用线段树进行区间修改,区间查询即可。

Code

https://ac.nowcoder.com/acm/contest/view-submission?submissionId=48499549

一些比赛的题解 文章被收录于专栏

一些比赛的题解

全部评论
大佬,请问为什么x2要--呀,这里想不明白
点赞 回复 分享
发布于 2021-08-18 18:25

相关推荐

不愿透露姓名的神秘牛友
06-29 17:30
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务