【问题标题】:Codeforces 761 B "Dasha and Friends" solutionCodeforces 761 B“大傻和朋友”解决方案
【发布时间】:2023-03-04 01:01:01
【问题描述】:

我正在尝试解决 codeforces 上的问题761 B“Dasha and Friends”,但我已经坚持了一段时间了。这似乎是一个简单的问题,但我就是想不通。这是 codeforces 教程页面上给出的问题的官方提示:

让我们在数组中添加两条轨道的相邻障碍对之间的距离,并检查是否可以使用元素的循环移位从另一个获得其中一个。

我不明白上面的陈述是什么意思或为什么会成立。另外,我找到了解决方案here,但我不明白他们在做什么。谁能帮我这个?我不需要一个完整的解决方案,只需要了解这里的基本概念是什么。任何帮助表示赞赏,谢谢!

【问题讨论】:

    标签: c++ arrays math


    【解决方案1】:

    跑步者有不同的起点,因此您无法比较相对于起点的位置。

    但障碍物之间的距离是相同的,所以这些距离的序列比较是有效的。

    第一个问题是围绕起始位置进行分段 - 但由于循环运行的循环性质,我们可以通过从 L+first_barrier 中减去 last_barrier 来获得它的长度。

    第二个问题 - 我们有两个距离列表/数组,并且应该检查一个列表的循环移位是否给出类似于第二个列表的列表。链接解决方案仅生成所有循环移位并比较身份。这是一种简单的方法,对于给定的限制 (n=50) 效果很好。

    如果您需要对较大的 n 执行相同操作,则二次复杂度变得不合适,您需要更好的方法 - 例如,将第一个列表 (4,1,2=>4,1,2,4,1,2) 加倍并搜索第二个列表的出现次数(如子字符串)搜索)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-07
      • 1970-01-01
      • 2019-08-18
      • 1970-01-01
      • 2017-08-15
      • 2011-02-18
      • 2016-11-01
      • 2011-08-10
      相关资源
      最近更新 更多