随笔分类 - 字符串
摘要:一个字符串最多有一个 \(?\),相当于每个字符串最多有两个状态,显然 \(2-sat\)。 看到前缀想到 \(trie\)。考虑将所有可能出现在答案中的字符串全都塞到 \(trie\) 树里,那么对于一个字符串状态 \(x\) 的末尾对应的点 \(cur\),假如选择了这种状态,\(cur\) 的
阅读全文
摘要:发现自己根本没有 SAM 基础,所以想补一篇学习笔记。 SAM SAM 是一个可以接受字符串 \(s\) 的所有后缀的最小 \(DFA\)(确定性有限状态自动机)。不过他最大的用处和后缀数组一样,都是用来处理子串信息的。既然他是 \(DFA\),那他就是 \(DAG\),下文的 \(DAG\) 都代
阅读全文
摘要:首先正难则反,想到答案即为满足第一条要求的回文子序列数量,减去回文子串数量。回文子串数量 \(hash+\) 二分即可,考虑前半部分。 假如我们将一个回文子序列一层层剥开,就会发现它其实是由多个相同的字母对拼成的。那么容易想到把字母 \(a\) 和字母 \(b\) 的贡献分开计算。那第一条要求就可以
阅读全文
摘要:学到新思路了:求解 \(k\) 大值时,可以将所有元素放一块一起跑。 考虑到 \(n,q\) 奇小无匹,我们便可以制造一个 \(O(qn\log V)\) 的代码。 那么对于我们不想在时间复杂度中出现的 \(m\),我们直接把他扔进可持久化 \(Trie\) 中销赃。 再根据刚才那个思路,将 \([
阅读全文
摘要:相当好的题目,虽然和我前几天出的题重了qwq。 \(lmx\) 是我们的红太阳,没有他我们就会死!!! 暴力枚举一个端点,然后用可持久化 \(01\ Trie\) 或者离线 \(Trie\)(当然这题用不了,但不强制在线的话是可以的)得到答案。时间复杂度 \(O(nm\log n)\),过不了,考虑
阅读全文
摘要:后缀自动机维护子串公共后缀方便一点,所以直接倒序插入字符串即可。 我们给所有前缀打上标记,然后跑树形 \(dp\),设 \(sum_i\) 表示第 \(i\) 个点的子树内有多少个前缀,\(ans\) 统计 \(\sum \text{LCP}(T_i,T_j)\),则有: \[ans=\sum\li
阅读全文
摘要:讲一种自认为最暴力的方法。 首先肯定还是用差分的思想,对于每一张卡片进行重新标号,在卡片串与卡片串中插入特殊字符,然后找重复了 \(n\) 次的子串。 这里我们对于每一个子串开一个大小为 \(n\) 的标记,表示他在不在第 \(i\) 个卡片串里。 然而这样很明显容易 \(\text{MLE+TLE
阅读全文
摘要:所有子串,一眼 \(\text{SAM}\)。 从根开始一直往下走,走到任何一个点都代表一个子串。维护 \(sm\) 表示每个子串有几个(\(t=0\) 就当一个),可以用树形 \(dp\) 跳后缀链接树,然后暴力跑 \(\text{SAM}\) 即可。 当然我们发现这样时间复杂度会爆炸,因为第二部
阅读全文
摘要:原题链接:\(luogu\)$\ \ $ \(BZOJ\)$\ \ $ \(LOJ\) 题目大意:有一个可以支持插入和修改的字符串,定义函数 \(\operatorname{LCQ(x,y)}\) 表示从 \(x\) 开始的后缀与从 \(y\) 开始的后缀的最长公共前缀。 声明变量: \(ls\):
阅读全文

浙公网安备 33010602011771号