BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #92350同步于 2017/3/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

互联网公司面试算法题

xueluowuhen
2017/3/11镜像同步11 回复
坐标轴上有两种线段,分别是黑线段和白线段,每种线段若干,其起止点坐标已知。求问如何选出最少的白线段,能够完全覆盖黑线段,如果不能覆盖,指出那条黑线段不能被覆盖。好像是贪婪算法,求解啊
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
w350053002机器人#1 · 2017/3/12
感觉没有很清楚线段是一维还是二维。。坐标系的话就是二维了我理解。。
Mrxiaobai机器人#2 · 2017/3/12
题目意思你没说清楚啊。坐标轴是一条x轴? 黑线段和白线段都是一个区间?还有指出不能覆盖的黑线段是所有的不能覆盖的,还是指出一条就行?
hlcjj机器人#3 · 2017/3/12
我就是理解成一维的了,每个线段都用<l,r>表示,<lb,rb><lw,rw>表示黑线和白线。首先找到右端点最小的黑色线段,你为了覆盖这条线段就必须找lw <= rb && rw>= lb的这些白线(如果找不到当然这条线就无法覆盖)。为了选出的白线可以覆盖更多黑线,就要找中间有最大的rw值的白线进行覆盖,然后再找未被覆盖的右端点最小的黑线直到选完。应该就是按端点排序后扫一遍 【 在 xueluowuhen 的大作中提到: 】 : 坐标轴上有两种线段,分别是黑线段和白线段,每种线段若干,其起止点坐标已知。求问如何选出最少的白线段,能够完全覆盖黑线段,如果不能覆盖,指出那条黑线段不能被覆盖。好像是贪婪算法,求解啊
xueluowuhen机器人#4 · 2017/3/13
应该是lw <= lb && rw>= rb吧 【 在 hlcjj 的大作中提到: 】 : 我就是理解成一维的了,每个线段都用<l,r>表示,<lb,rb><lw,rw>表示黑线和白线。首先找到右端点最小的黑色线段,你为了覆盖这条线段就必须找lw <= rb && rw>= lb的这些白线(如果找不到当然这条线就无法覆盖)。为了选出的白线可以覆盖更多黑线,就要找中间有最大的rw值的白线进行覆盖,然后再找未被覆盖的右端点最小的黑线直到选完。应该就是按端点排序后扫一遍
xueluowuhen机器人#5 · 2017/3/13
Ik=< sk , fk > represents white Interval Jk=< bk , ek > represents black Interval Classify event e: e=(sk , w, Ik) white interval activation event (interval activation time = sk) e=(bk , b, Jk) black interval activation event (interval activation time = bk) ?ActInts = Max Priority Queue of activated intervals Ik [priority = fk ]. ?Events = Min Priority Queue of unprocessed events [priority = activation time]. Algorithm OptIntervalIntervalCover (I= {I1 , I2 , … , Im}, J= {J1 , J2 , … , Jn}) 1. ; ; , 2. MakeEmptyMaxHeap(ActInts) 3. Events ? ConstructMinHeap( ) § O(n+m) time 4. while ?do § O(n + m) iterations 5. e ?DeleteMin(Events) § next event to process, O(log(n+m)) time 6. if e = (sk , w, Ik) then Insert(Ik , ActInts) § activate interval 7. else § event e is balck interval 8. if ek>Last then do§ greedy choice 1: < bk, ek >=leftmost uncovered interval 9. Ik ? DeleteMax(ActInts) § greedy choice 2, O(log m) time 10. if fk < ek then return ( Interval(bk, ek) is not covered by I) 11. else do 12. C? C {Ik} 13. Last? fk 14. end-else 15. end-if 16. end-while 17. return ( C ) end Complexity: O( (n+m) log(n+m) ) time
hlcjj机器人#6 · 2017/3/13
没看见是完全覆盖,我这个是有覆盖的方案,完全覆盖改一下就行 【 在 xueluowuhen 的大作中提到: 】 : 应该是lw <= lb && rw>= rb吧
xueluowuhen机器人#7 · 2017/3/13
还不太对,交叉覆盖的情况没考虑 【 在 hlcjj 的大作中提到: 】 : 没看见是完全覆盖,我这个是有覆盖的方案,完全覆盖改一下就行
dxy1机器人#8 · 2017/3/13
【 在 xueluowuhen 的大作中提到: 】 : 坐标轴上有两种线段,分别是黑线段和白线段,每种线段若干,其起止点坐标已知。求问如何选出最少的白线段,能够完全覆盖黑线段,如果不能覆盖,指出那条黑线段不能被覆盖。好像是贪婪算法,求解啊 有题目提交的地方吗?
dxy1机器人#9 · 2017/3/13
【 在 xueluowuhen 的大作中提到: 】 : 还不太对,交叉覆盖的情况没考虑 同一个起点的话选右边最长的那个应该就考虑了吧?