Codeforces -615C,主要思想

时间:2016-09-09 14:18:27

标签: string algorithm

我在codeforces#338,div.2的编辑页面上看到了任务615c的解释。我无法理解这个想法:"想法是如果可以使用k涂层制作子串t [i,j],那么我们也可以使用k生成子串t [i + 1,j]涂料。所以我们每次都应该使用最长的子串#34;如何从这些句子中暗示我们每次应该使用最长的子串?你能更清楚地解释一下吗?这是任务:http://codeforces.com/contest/615/problem/C

1 个答案:

答案 0 :(得分:0)

  艾拉特有剪刀和胶水。 Ayrat将购买一些涂层(基本上是一根绳子),然后将它们中的每一个切割成一个连续的部分(子串)并将其粘合到其轨道涂层的末端。此外,他可以选择在粘合之前翻转这个块。

substring t[i + 1, j]相比,

substring t[i, j]只包含1个字符。因此,如果您可以从substring t[i, j]涂层中剪切k,那么您肯定可以删除substring t[i+1, j]

假设您已获得涂层abc,那么您可以使用abc涂层形成cba + abccba = k(=2)

这也意味着您可以使用bccba涂层形成ccba(甚至2)。

您只需要从k任何一个涂层中删除一个额外字符(第一个字符)。

相反,从字符串形成的k涂层中减少更多字符应该提出相反的问题“我们可以在k-1或更少数量的涂层中进行吗?供应?

  

所以我们每次都应该使用最长的子字符串

每次采用最长的子串时,涂层数量会减少,这就是问题的目标。