$lyndon\ word$(以下简写为Lw):对于一个字符串s,其为Lw当且仅当其的最小后缀为自身
性质:若$u<v$为LW,那么$uv$也为Lw(反证法即可证)
$lyndon$分解:将一个字符串分为$s=s_{1}s_{2}...s_{k}$,满足$\forall 1\le i\le k$,有$s_{i}$为Lw;$\forall 1\le i<k$,有$s_{i}\ge s_{i+1}$
性质:对于一个字符串,有且仅有1个$lyndon$分解
存在性:初始将令$s_{i}=s[i]$(显然都为Lw),然后重复以下过程:若存在$s_{i}<s_{i+1}$,任选其中一个i将两个串合并,根据Lw的性质其仍为Lw,由于每一次合并都会减少一个字符串,因此合并次数有限,当其停止时即符合要求
唯一性:1.任意一组解都可以用上述方式构造出(证明略);2.对于三个字符串$s_{1}<s_{2}<s_{3}$暴力枚举所有合并方法,容易证明只有1种
记$f(i)$表示以i为开头的$lyndon$分解所拓展到的位置,考虑如何去求$f(f(...f(1)+1)+1)$
有一种做法:不断将i与之后的字符合并,这显然是不够的(比如$aab$,a无法与a合并但能与$ab$合并),但从中我们可以想到1种做法:当$i$合并到$j$后发现无法合并下去,那么不妨去拓展$j$,直到拓展到一个位置$k$并发现满足$s[i,j)<s[j,k]$时,就可以令$f(i)=k$并继续拓展$i$(由于$s[i,j)<s[j,k]$,所以如果j可以拓展,那么i一定也可以拓展),而如果直到j拓展完都没有满足,那么$f(i)=j$并已经求出了$f(j)$
考虑这种做法的时间复杂度:一个字符最多只会被拓展一次,因此复杂度为$o(n)$
PS:这种做法就是Duval算法,不同的是Duval算法在发现了$s[i,j)>s[j,k]+zzz...$(出现了不同的位置)时会直接令$f(i)=j-1$并去求$f(j)$
回到原题,容易发现第i个点的最小后缀就是以i为结尾最长的Lw,那么只需要当拓展到i时记录一下即可

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 1000005
4 #define mod 1000000007
5 int t,a[N];
6 char s[N];
7 int main(){
8 scanf("%d",&t);
9 while (t--){
10 scanf("%s",s);
11 int n=strlen(s);
12 for(int i=0;i<n;){
13 int j=i+1,k=i;
14 a[i]=i;
15 while ((j<n)&&(s[k]<=s[j])){
16 if (k==i)a[j-1]=i;
17 else a[j-1]=a[k-1]+j-k;
18 if (s[k]==s[j])k++;
19 else k=i;
20 j++;
21 }
22 while (i<=k){
23 a[i+j-k-1]=i;
24 i+=j-k;
25 }
26 }
27 int s=1,ans=0;
28 for(int i=0;i<n;i++){
29 ans=(ans+s*(a[i]+1LL))%mod;
30 s=s*1112LL%mod;
31 }
32 printf("%d\n",ans);
33 }
34 }

[hdu6761]Minimun Index的更多相关文章

  1. Leetcode:Longest Substring Without Repeating Characters分析和实现

    题目大意是传入一条字符串,计算出这样的这样一条子字符串,要求子字符串是原字符串的连续的某一段,且子字符串内不包含两个或两个以上的重复字符.求符合上面条件的字符串中最长的那一条的长度. 首先注意到任意一 ...

  2. MySQL 优化之 ICP (index condition pushdown:索引条件下推)

    ICP技术是在MySQL5.6中引入的一种索引优化技术.它能减少在使用 二级索引 过滤where条件时的回表次数 和 减少MySQL server层和引擎层的交互次数.在索引组织表中,使用二级索引进行 ...

  3. 在v-for中利用index来对第一项添加class(vue2.0)

    <li v-for="(el,index) in event" v-bind:class="{ 'm-swipe-active': !index}"> ...

  4. Ubuntu-server 下Apache2 配置.htaccess 隐藏thinkPHP项目index.php

    需要开启Apache2的rewrite模块 1.打开/etc/apache2/apache2.conf 将文件中的AllowOverride None改为AllowOverride All 2.修改m ...

  5. SQL Server-聚焦强制索引查询条件和Columnstore Index(九)

    前言 本节我们再来穿插讲讲索引知识,后续再讲数据类型中的日期类型,简短的内容,深入的理解,Always to review the basics. 强制索引查询条件 前面我们也讲了一点强制索引查询的知 ...

  6. directx12中vetex buffer、index buffer和constant buffer绑定piple line的时机

    类别 时机 函数 建Heap vetex buffer 在Draw函数中 ID3D12GraphicsCommandList::IASetVertexBuffer 否 index buffer 在Dr ...

  7. URL_MODEL 2 不能访问 在APACHE服务器上的访问方式上去除index.php

    thinkphp URL_MODEL=2,访问链接http://i.cnblogs.com/Online/index.html  报错: Not Found The requested URL /on ...

  8. index+match函数在压实度中对盒号盒质量随机不重复的最佳使用

    首先按照升序排列好盒号和盒质量,使其一一对应, 盒号    盒重量    随机值rand()     随机值大小排列rank 1         2001       0.01             ...

  9. [LeetCode] Random Pick Index 随机拾取序列

    Given an array of integers with possible duplicates, randomly output the index of a given target num ...

随机推荐

  1. vj-2021.6.5-补题

    B - B 内容: One day, as Sherlock Holmes was tracking down one very important criminal, he found a wond ...

  2. [JVM-6]类加载器

    定义 前面说过加载阶段是一个可以让设计人员高度自控的模块,因为类文件的源头可以是多种多样的,代码生成.反射生成或从网络中生成等.因此类加载器作为对这些文件的处理就显得尤为重要. 但类加载器的功能不仅如 ...

  3. silky微服务快速开始

    项目介绍 Silky框架旨在帮助开发者在.net平台下,通过简单代码和配置快速构建一个微服务开发框架. Silky 通过 .net core的主机来托管微服务应用.通过 Asp.Net Core 提供 ...

  4. Coursera Deep Learning笔记 序列模型(二)NLP & Word Embeddings(自然语言处理与词嵌入)

    参考 1. Word Representation 之前介绍用词汇表表示单词,使用one-hot 向量表示词,缺点:它使每个词孤立起来,使得算法对相关词的泛化能力不强. 从上图可以看出相似的单词分布距 ...

  5. [no code][scrum meeting] Beta 10

    $( "#cnblogs_post_body" ).catalog() 例会时间:5月25日15:00,主持者:伦泽标 下次例会时间:5月26日11:30,主持者: 一.工作汇报 ...

  6. Beta阶段第一次会议

    Beta阶段第一次例会 时间:2020.5.16 完成工作 姓名 完成任务 难度 完成度 lm 1.修订网页端信息编辑bug2.修订网页端登录bug(提前完成,相关issue已关闭) 中 100% x ...

  7. PCB中,Solder Mask与Paste Mask有啥区别呢?

    Solder Mask Layers: 即阻焊层.顾名思义,他的存在是为了防止PCB在过波峰焊的时候,不应涂锡的地方粘上锡. 可以简单理解为一个洞,该区域(洞)以外的地方,都不允许有焊锡,即只能涂绿油 ...

  8. linux下文件特殊权限设置位S和沾附位T(转载)

    今天在创建文件的时候,发现了文件权限末尾有个T,之前没留意过,后来又用c创建(open)了两个文件来查看,在我没有指定权限(省略open的第三个参数)的时候,有时还会出现S,虽然还没弄懂什么时候会出现 ...

  9. 矩形覆盖 牛客网 剑指Offer

    矩形覆盖 牛客网 剑指Offer 题目描述 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形.请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? class Solution: ...

  10. 电路维修(双端队列 & 最短路)

    达达是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女翰翰,从而被收留在地球上. 翰翰的家里有一辆飞行车. 有一天飞行车的电路板突然出现了故障,导致无法启动. 电路板的整体结构是一个$ ...