Lyndon 分解
现在只会 lyndon 分解怎么写。所以先放在这里占坑。以后补 Runs 和 Lyndon Tree 相关知识。
大量抄 pdf 和 cmd 博客。
Lyndon Word 及其相关性质
定义:若字符串
- Lyndon Word 没有 Border。
证明:如果存在,则 border 作为后缀比它小。
2. 若两个字符串
证明:首先显然开头在
- 若字符串
和字符 满足 为某个 Lyndon Word 的前缀,则对 字符 , 是 Lyndon Word。
证明:设
Lyndon 分解
定义:一个串
为 Lyndon Word。 。
定理:Lyndon 分解存在且唯一。
存在性:构造即证明。初始令
唯一性:假设存在两个 Lyndon 分解
Duval 算法
Duval 算法可以在
的 Lyndon 分解已经固定。 的分解没有固定, 是 Lyndon Word,且 Lyndon 分解确定的上一个串 。 。
当前处理到
时, 都 ,仍然不变。 时, 是 Lyndon Word,则不断往前合并,整个 固定为 Lyndon Word。 时, 固定为 Lyndon Word, 调整至 的开头。
显然三个指针都是单调的,因此复杂度
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s[5000010];
int n,ans;
int main(){
scanf("%s",s+1);n=strlen(s+1);
for(int i=1;i<=n;){
int j=i,k=i+1;
while(k<=n&&s[j]<=s[k]){
if(s[j]<s[k])j=i;
else j++;
k++;
}
while(i<=j){
ans^=i+k-j-1;
i+=k-j;
}
}
printf("%d\n",ans);
return 0;
}
快踩
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)