我在codeforces#338,div.2的编辑页面上看到了任务615c的解释。我无法理解这个想法:"想法是如果可以使用k涂层制作子串t [i,j],那么我们也可以使用k生成子串t [i + 1,j]涂料。所以我们每次都应该使用最长的子串#34;如何从这些句子中暗示我们每次应该使用最长的子串?你能更清楚地解释一下吗?这是任务:http://codeforces.com/contest/615/problem/C
答案 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
或更少数量的涂层中进行吗?供应?“
所以我们每次都应该使用最长的子字符串
每次采用最长的子串时,涂层数量会减少,这就是问题的目标。