首页 > 其他分享 >最小表示法 学习笔记

最小表示法 学习笔记

时间:2023-05-09 20:14:04浏览次数:38  
标签:.. int 最小 笔记 表示法 read 字符串

描述:给出一个字符串s,将s循环移位若干次之后使得字符串的字典序最小。

朴素的思路:对于每一个位置为结果字符串的开头去暴力做。显然最坏复杂度O(|S|^2)
于是考虑优化这个过程。

假设对于不同的两个下表i和j,如果有s[i,i+1,..,i+k-1]=s[j,j+1,..,j+k-1]和s[i+k]>s[j+k],那这个时候i已经不能称为答案了。可是再进一步的,由于s[i+p,i+p+1,..,i+k]>s[j+p,j+p+1,..,j+k]存在,所以对于所有p<k,起始下标i+p一定不比下标j+p优。这样,我们就可以直接把i跳到i+k+1。

于是做法就出来了。维护两个指针i和j,以及当前匹配的步数k。最初i=0,j=1(防止同一个字符串和自己匹配),然后每当s[i+k]>s[j+k]的时候跳i,s[i+k]<s[j+k]的时候跳j,在i=j的时候将j右移一位,这样就做完了。时间复杂度:i和j两个指针都各自遍历字符串恰好一边遍,所以复杂度O(|S|)。

int n;read(n);std::vector<int>a(n);
for(int &i:a)read(i);
int i=0,j=1,k=0;
while(i<n&&j<n&&k<n){
  if(a[(i+k)%n]==a[(j+k)%n])++k;
  else {
    if(a[(i+k)%n]>a[(j+k)%n])i=i+k+1;
    else j=j+k+1;
    if(i==j)j++;k=0;
  }
}i=min(i,j);
for(int l=i;l<i+n;++l)print(a[l%n],' ');

标签:..,int,最小,笔记,表示法,read,字符串
From: https://www.cnblogs.com/1358id/p/17386100.html

相关文章

  • 笔记本自带键盘如何关闭
    左下角搜索栏中搜索cmd,以管理员身份运行在弹出的窗口中将下面这段代码输入进去,并回车。scconfigi8042prtstart=disabled重启,笔记本自带键盘关闭如果想恢复,只要外置键盘以同样方法输入下面这个代码,重启即可。scconfigi8042prtstart=auto......
  • 【笔记】编译原理 - 中
    5语法制导翻译考虑语义分析——为CFG中的文法符号设置语义属性;在语法分析树上,语义属性值用与文法符号所在产生式(语法规则)相关联的语义规则来计算语义规则同语法规则(产生式)相联系,涉及概念:语法制导定义(Syntax-DirectedDefinitions,SDD)语法制导翻译方案(Syntax-Directe......
  • 论文阅读笔记《Training Socially Engaging Robots Modeling Backchannel Behaviors w
    TrainingSociallyEngagingRobotsModelingBackchannelBehaviorswithBatchReinforcementLearning训练社交机器人:使用批量强化学习对反馈信号行为进行建模发表于TAC2022。HussainN,ErzinE,SezginTM,etal.TrainingSociallyEngagingRobots:ModelingBackc......
  • 「TJOI2018」智力竞赛(二分+DAG最小可相交路径覆盖)
    https://loj.ac/problem/2574这个题目描述扎心了。简要题意:用n+1条可以相交的路径去覆盖DAG,使得没被覆盖的点的权值的最小值最大。首先二分答案,问题转换为有一些点一定要被覆盖,问n+1条路径内有没有解。这个可以暴力费用流,每个点拆成两个点,\(i->i',r=1\),如果这个点必选,则费用为inf,......
  • 扩展中国剩余定理学习笔记
    给定\(n\)组非负整数\(a_i,b_i\),求解关于\(x\)的方程组的最小非负整数解。\(\begin{cases}x\equivb_1\({\rmmod}\a_1)\\x\equivb_2\({\rmmod}\a_2)\\...\\x\equivb_n\({\rmmod}\a_n)\end{cases}\)首先我们看一下只有1个方程的情况:$x\equivb_......
  • MySQL笔记之文件和日志
    一、存储文件1、存放位置MySQL数据库会在data目录下,以数据库为名,为每一个数据库建立文件夹,用来存储数据库中的表文件数据。不同的数据库引擎,每个表的扩展名也不一样,例如:MyISAM用“.MYD”作为扩展名,Innodb用“.ibd”等。 2、FRM表结构信息文件无论是哪种存储引擎,创建表之......
  • Spring AOP官方文档学习笔记(四)之Spring AOP的其他知识点
    1.选择哪种AOP(1)使用SpringAOP比使用完整版的AspectJ更方便简单,因为不需要在开发和构建过程中引入AspectJ编译器以及织入器,如果我们只希望通知能够在SpringBean上执行,那么选用SpringAOP就可以了,如果我们希望通知能够在不由Spring所管理的对象上执行,那么就需要使用Aspect......
  • 读书笔记-人月神话
    读人月神话感触较深的是第一章的焦油坑,焦油坑是作者用来形容大型系统开发的一个概念。史前时代,恐龙、猛犸象、剑齿虎这些大型食肉动物碰到焦油坑也是没有办法挣脱的,而且越用力就越容易被沉入坑底。这种场景就像极了大型系统开发的工作。基本上一个大型的编程系统产品的开发成本会......
  • 【笔记】docker安装
    step1、检查系统版本是否符合要求Docker要求CentOS系统的内核版本高于3.10Docker要求CentOS系统的内核版本高于3.10查看你当前的内核版本uname-r查看操作系统版本cat/etc/redhat-releasestep2、卸载旧版本(如果安装过旧版本的话,没有旧版本可以省略此步骤)yumr......
  • Fine-Grained学习笔记(4):条件下界与归约,图论问题的复杂度归约理论
    和P与NP问题一样,Fine-Grained领域中的许多问题也能相互归约,这意味着当这些问题中的任意一个问题的复杂度下界得到了证明或证伪,那么一系列问题的复杂度下界就都能够得到解决.APSP猜想:不存在$O(|V|^{3-\delta})$时间的(对于任意实数边权图都有效的)(确定性的)APSP算法.APSP猜......