摘要:
题意:给定一个字符串,求其中一个由循环子串构成且循环次数最多的一个子串,有多个就输出最小字典序的。题解:后缀数组+RMQ。 1、枚举循环串的长度ll,然后如果它出现了两次,那么它一定会覆盖s[0],s[ll],s[ll*2].....这些点中相邻的两个。 2、再枚举它覆盖的最左边的那个s[ll*i],通过rmq求s[ll*i]与s[ll*i+ll]的最长公共前缀K,可以看出,从[ll*i,ll*i+ll+K]这个区间内,s[ll*i,ll*(i+1)-1]重复出现了K/ll+1次。 3、在第2步中,还有可能就是循环串并不是从ll*i开始的,所以要枚举它前面[ll*(i-1)+1,l... 阅读全文