<分区>
我发现了这个叫做循环马拉松的问题:http://www.math.bas.bg/infos/files/2013-11-24-B2_eng.pdf来自 2013 年的 JBOI。
我已经尝试解决了一段时间,但没有运气......您介意指导我找到解决方案吗?
谢谢
标签 algorithm
<分区>
我发现了这个叫做循环马拉松的问题:http://www.math.bas.bg/infos/files/2013-11-24-B2_eng.pdf来自 2013 年的 JBOI。
我已经尝试解决了一段时间,但没有运气......您介意指导我找到解决方案吗?
谢谢
最佳答案
一种可能性是将当前运行者存储在双向链表中(以便在运行者被淘汰后轻松删除运行者)。
对于每对第一名比第二名更快的连续运行者,计算他们相遇的时间并将这个时间存储在堆数据结构中(堆包含相遇时间和指向第二名运行者的指针) .
堆将允许您找到下一个运行者(这将是堆顶部的一对),然后您可以及时更新您的数据结构 O(logn) 并重复直到堆为空.
更新需要:
如果本次 session 的第一名参赛者已从比赛中移除,则应跳过更新。
总的来说,这需要时间 O(nlogn)。
关于algorithm - 自行车马拉松 (JBOI 2013),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22050487/