随笔分类 - 字符串——后缀数组
摘要:题意: 给一个串$S$,$length\leq 1e5$,$Q\leq1e5$个询问,每次询问输出和$S_lS_{l+1}\dots S_r$长得一模一样的第$k$个子串的开头位置。 思路: 用后缀数组处理一下,那么所有相同子串最后的$sa$都会靠在一起,所以找到对应的$height$位置,然后向左
阅读全文
摘要:题意: 问给定串有多少本质不同的子串? 思路: 子串必是某一后缀的前缀,假如是某一后缀$sa[k]$,那么会有$n sa[k] + 1$个前缀,但是其中有$height[k]$个和上一个重复,那么最终的贡献的新串为$n sa[k] + 1 height[k]$。故最终结果为$\sum_{i = 1}
阅读全文
摘要:题意: 已知某字符串$str$满足$str_1 max\{str_2,str_3 \cdots str_n\}$,现要求把这个字符串分成连续的三组,然后每组都翻转,问字典序最小是什么? 思路: 因为$str_1 max\{str_2,str_3 \cdots str_n\}$,所以第一部分直接翻转后
阅读全文
摘要:题意: 给$n$个串,要你求出一个最长子串$A$,$A$在每个字串至少都出现$2$次且不覆盖,问$A$最长长度是多少 思路: 后缀数组处理完之后,二分这个长度,可以$O(n)$验证可行性,注意是“不覆盖”(英文不好看不懂),随便搞一下就好了。 代码:
阅读全文
摘要:题意: 给两个串$A、B$,问你长度$ =k$的有几对公共子串 思路: 先想一个朴素算法: 把$B$接在$A$后面,然后去跑后缀数组,得到$height$数组,那么直接$rmq$就能$O(1)$得到任意两个$A$和$B$的LCP。如果$LCP = k$,那么这个串的贡献对数为$LCP k + 1$。
阅读全文
摘要:题意: 给定一个串$s$,$s$必有一个最大循环节的连续子串$ss$,问最大循环次数是多少 思路: 我们可以知道,如果一个长度为$L$的子串连续出现了两次及以上,那么必然会存在$s[0]、s[L]、s[2L] \cdots s[L k]$中至少有两个连续的位置是相同的,然后看字母$s[L i]和s[
阅读全文
摘要:题意:一行数字,定义如下情况为好串: 1.连续一串数字,长度大于等于5 2.这行数字中多次出现这串数字的相似串,相似串为该串所有数字同加同减一个数字,如 1 2 3 和 5 6 7 3.至少有一个相似串和他不相交 问最长多少 思路:先作差,那么不相交相似问题就转化为不相交相同子串问题。我们二分子串长
阅读全文