POJ 2932 扫描线思想

这个题确实太神奇了

大意就是给出了n个互不相交的圆。 各个圆之间有可能一个完全包含了另一个。这里包含就是一个圆整个都被另一个圆圈再里面。

现在求那些没有被包含的圆的序号。

数据量是4W

所以N2的肯定不行。

苦思冥想,不得其解

http://blog.sina.com.cn/s/blog_6e7b12310100qoeh.html

看了这个之后不由得大呼数据结构之博大精深

大意就是类似于我们经常用的那种扫描线,只不过这里是圆。

每个圆有最左边的点和最右边的点。我们就是从左到右按顺序把这些点扫一遍。

扫的过程中呢,如果扫到了一个圆的左端点,那么就要看这个圆是否被包含了,如果没被包含,就加入我们设计的数据结构中。那么怎么判断有没有被包含了呢,最裸的想法是看是否被之前数据结构中的圆包含。实际上只需要跟数据结构中跟自己圆心纵坐标相近的上下两个圆来判断即可了,因为此时我们设计的数据结构中一定都是一些互不包含的一些圆,如果新进的这个圆被包含了,那么那个包含它的圆必然在其相邻的地方。

如果扫到了一个圆得右端点呢,就要把这个圆删除掉了,因为再往后的圆不会跟它发生关系了。

根据这个能插入,能删除,能找相邻的条件,可以发现,用set 来实现是再好不过了。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值