Lyndon分解

Posted xyj1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lyndon分解相关的知识,希望对你有一定的参考价值。

模板题:https://loj.ac/p/129

知识点:是while不是if

待填坑

code:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 2e6 + 5;
int n;
char s[MAXN];
int main()
{
    //freopen("in.txt","r",stdin);
    scanf("%s",s + 1);
    n = strlen(s + 1);
    int head = 1,tem = 1,k = 2;
    while(head <= n)
    {
        tem = head;
        k = head + 1;
        while(k <= n && s[tem] <= s[k])
        {
            if(s[tem] == s[k])
                tem++;
            else
                tem = head;
            k++;    
        }    
        while(head <= tem)
        {
            head += k - tem;
            printf("%d ",head - 1);
        }
    }
    return 0;
}

 

 


以上是关于Lyndon分解的主要内容,如果未能解决你的问题,请参考以下文章

Lyndon分解和最小循环表示学习

hdu6761 Mininum Index // lyndon分解 + duval贪心 + 秦九韶算法

Lyndon分解

P6114 模板Lyndon 分解

[Lyndon分解] HDU 6761 Minimum Index (2020多校训练)

Lyndon相关