这是myy出的神仙题,我花了很多天时间才看懂题解。这份题解参考myy的官方题解和yhx的题解,大概算是后者的详细证明版本。
我们接下来的定义都是在一个特殊的字典序意义下的,也就是一个串的前缀大于自身(也可以理解为给每个有限长字符串最后加一个 U \tt{U} U,然后在通常字典序意义下比较)。另外我们定义两个字符串的严格 < < <与严格 > > >,字符串 s s s严格 < t <t <t意味着存在位置 i > 0 i>0 i>0,使 s [ 1 … i − 1 ] = t [ 1 … i − 1 ] s[1\ldots i-1]=t[1\ldots i-1] s[1…i−1]=t[1…i−1],且 s [ i ] < t [ i ] s[i]<t[i] s[i]<t[i],严格 > > >反过来。
这样我们可以定义反向lyndon串。一个串是反向lyndon串当且仅当它的所有后缀都 < < <它(显然是严格 < < <)。定义一个串 s s s的反向lyndon分解是 s = s 1 + s 2 + … + s l s=s_1+s_2+\ldots+s_l s=s1+s2+…+sl,其中 s 1 ≤ s 2 ≤ . . . ≤ s l s_1\leq s_2\leq ... \leq s_l s1≤s2≤...≤sl,可以发现反向lyndon分解是良定义的,它具有和一般的lyndon分解类似的性质,例如存在且唯一。例如,串 A A C A \tt{AACA} AACA的反向lyndon分解是 A + A + C A \tt{A}+\tt{A}+\tt{CA} A+A+CA。
下面给出一个重要引理:对于一个反向lyndon串 s s s,若取 k k k(可以为 ∞ \infty ∞)个串 t 1 , t 2 , … t k > s t_1,t_2,\ldots t_k>s t1,t2,…tk>s,则 t 1 + t 2 + … t k > s t_1+t_2+\ldots t_k>s t1+t2+…tk>s,且若 ∣ t 1 ∣ + ∣ t 2 ∣ + … ∣ t k ∣ ≥ ∣ s ∣ |t_1|+|t_2|+\ldots |t_k|\geq |s| ∣t1∣+∣t2∣+…∣tk∣≥∣s∣,这里的 > > >为严格 > > >。证明思路是设 l i = ∣ t 1 ∣ + ∣ t 2 ∣ + … ∣ t i ∣ l_i=|t_1|+|t_2|+\ldots|t_i| li=∣t1∣+∣t2∣+…∣ti∣,假设 l i − 1 < ∣ s ∣ l_{i-1}<|s| li−1<∣s∣,若 l i < ∣ s ∣ l_i<|s| li<∣s∣,则 s [ l i − 1 + 1 … l i ] ≤ s [ 1 … ∣ t i ∣ ] ≤ t i s[l_{i-1}+1\ldots l_i]\leq s[1\ldots |t_i|]\leq t_i
UOJ 494
最新推荐文章于 2022-11-10 15:22:24 发布
这篇博客深入探讨了反向Lyndon串的概念及其性质,包括反向Lyndon分解、核心(c(s))的定义和重要性。博主通过一个引理证明了特定串的顺序关系,并介绍了利用反向Lyndon串进行串排序的算法,算法时间复杂度为O(nm^2)。此外,博主还讨论了算法的细节,包括如何确定合并顺序以及特殊情况的处理。
摘要由CSDN通过智能技术生成