【模型转换】最少点的覆盖区间

题目大意:在坐标系中给出若干个点的坐标,圆的直径为d且圆的圆心在x轴上,求使用圆的个数最少使得所有点都被覆盖掉。如果无论多少个圆都覆盖不了所有的点,就输出-1.

解题思路:

这题乍看起来真的很像几何啊几何。但事实上跟几何没有多大关系。

圆心在x轴上,给出了每个点的坐标,也就是点到x轴和y轴的距离是已知的。那么我们把当前点的在x轴上的横坐标作为圆心,根据给出的半径可以画出两个大小相同,方向不同三角形,三角形的三边长分别为直径d,到x轴的距离y,以及我们需要求的第三边。根据这个第三边可以确定一个区间。记录这个区间的左端点和右端点,整个问题就变成了用最小的点覆盖所有的区间的问题。

这种问题话说是有很多很多的思路,当然我只大概明白一种。

根据区间的左端点排序,那么区间和区间之间有三种关系:包含、交叉、分离。

考虑第一种情况,l[i]<midr,那么可以用前面区间所用的点来覆盖当前这个区间一部分。但是Minr~r[i]这一段区间是无法用原来区间的点来覆盖的,所以需要将minr更新至r[i]

第二种情况,同样可以用前面区间的点来覆盖当前这个小区间,这里的minr不需要更新.

第三种情况就需要加点来覆盖了,同样minr需要更新到r[i]

初始化ans:=1;每次加点,ans+1即可。

代码略。有要代码的留言联系。

Viaky 原创。请勿copy。

转载于:https://www.cnblogs.com/Viaky/archive/2011/08/11/2135400.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值