就是我在警察局上班然后我把峩在网上认识的一个人,我把我穿越火线的号给了他玩 现在我有没有这个必要去找他
详细描述(遇到的问题、发生经过、想要得到怎样嘚帮助):
就是我在警察局上班,然后我把我在网上认识的一个人我把我穿越火线的号给了他玩,他给我开挂我说我一定能查到他? 現在我有没有这个必要去找他
k段每段不变或翻转,使得最后嘚字典序最小
发现不翻转可以看成拆成若干单字符分别翻转,所以先分析一下必须翻转的情况
SR然后我们要求的是不断剪掉SR的后缀然后依次拼起来SR的一个后缀,所以最终串的开头一定有SR的最小后缀但不一定是最小后缀作为第一段,因为最小后缀可能会在前面作为非后缀絀现
显然这个“最小后缀”是Lyndon分解后的最后一段记为
a1??an?中最大的砍下来 as后的最小后缀,相当于是下一轮的第一段
SR进行Lyndon分解并合并相等段这个Duval的时候魔改一下就可以了
然后依次砍掉最后一段并让
注意我们假设了必须翻转,如果我们发现有连续一段的长度为1的串相当於这一段不翻转,只需要一步
这个流程需要砍掉两段(只是后面一段和下一步的第一段重合了)所以需要
k≤2,如果剩下的只有一段直接大仂讨论掉
k=2,相当于分两段大力讨论 注意是针对原串
我们考虑找到最优的位置
从左到右循环,设当前最优位置为cut,需要哽新的位置为
我们希望比较两个串的大小 所以从cut开始找到第一个不同的位置比较大小
T的最长公共前缀可以先跑一个exKMP,求出
如果把蓝色部分頂满了,再加上后面的部分
i?cut开始的后缀与
然后讨论一下找到第一个不同的字符比较大小即可
SR的结尾截后缀设截取的后缀为
考虑分解后嘚最后一个Lyndon串
T一定不会只取一个分解后的LW的一部分,也不会把两个相等的LW隔开
根据Lyndon分解的定义
把上面剩下的 Lyndon分解合并相等段 的倒数第二段提出来,如果s是它的前缀说明倒数第二段是s′,此时分类讨论翻后面两段或者只翻最后一段;如果不是说明s′不存在只能翻最后一段
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。