随笔分类 - 字符串===============
摘要:学习资料 https://blog.csdn.net/qq_36797743/article/details/89191890 例题:
阅读全文
摘要:链接: https://codeforces.com/gym/102832/problem/G Pro: 给定一个 Sol: 很容易想到另一个题,叫歌唱王国。 然后按照那道题的套路推一发式子 发现对于任意一个字符串的 \[ \begin{align*} ans_S&=\sum_{i,i\ is\ a
阅读全文
摘要:Pro: https://www.luogu.com.cn/problem/CF1437G 给定一个大小为n的字符串集合,每个字符串有一个初始为0的权值 支持以下q次操作 1.把第个字符串的权值改为 2.给定一个字符串s,求出字符串集合中所有在s中出现过的字符串的权值的最大值 Sol:
阅读全文
摘要:别的都挺好理解的 难以理解的那个地方还是clone节点的问题 这里给一个非常好的例子 asabab 对这个字符串建立后缀自动机 会在最后一个字符的时候出现克隆节点的情况 仔细画一遍parent树应该就能理解了 克隆节点的意义实际上是为了把原本的一个节点拆为两个节点 为什么要拆呢 因为字符串末尾新增一
阅读全文
摘要:AC自动机的基本流程 先用所有模式串建立一颗Trie树 然后去计算Trie树每一个节点的fail指针(失配后应该转移到哪个节点) 同时额外补一些边,把Trie树改为Trie图 建立AC自动机的代码 解释一下这个补边是什么操作 比如这棵Trie树 先考虑没有额外补边的情况 如果在9号节点尝试沿着k边走
阅读全文
摘要:https://www.luogu.com.cn/problem/P5319 把题目要求最大化的那个式子,取一手对数,然后就变成了一个分数规划问题。 二分后AC自动机上DP即可。 // luogu-judger-enable-o2 #include<bits/stdc++.h> #define N
阅读全文
摘要:a1[i]为i这个位置k距离内是否有A。 a2[i]为i这个位置k距离内是否有G。 。。。。。。 for(int i=1;i
阅读全文
摘要:https://www.luogu.org/problemnew/show/P4384 容斥一下考虑计算切两刀使得三个串都不存在的s[l,r]的方案数。 分类讨论一下。 1.有三个互不相交的目标串 此时显然无解。 2.最左边的目标串和最右边的目标串相交 画一下图可以发现。 答案是一个sigema (
阅读全文
摘要:pro: 维护一个01字符串,支持在结尾动态加字符。 每一个长度 define N 22000 define L 20000 define eps 1e 7 define inf 1e9+7 define db double define ll long long define ldb long d
阅读全文
摘要:考虑kmp。 这个题的主要问题就在于怎样使复杂度是正确的O(n)。 可以先预处理一个数组cnt[]表示不考虑不能相交这个限制,有多少个border。 这个东西其实也就是fail树上的深度。 然后考虑怎么算num,直接暴力跳到长度<=i/2为止,第一合法个位置的cnt就是答案。 这样做复杂度依然是均摊
阅读全文
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=2555 想一下sam求子串出现次数的方法基本就能得到正解。 由于子串出现次数是一个子树和的形式。 动态插入字符串又要求动态维护树的结构,显然要用LCT。 注意一下LCT维护子树和的写法即可。 cpp
阅读全文
摘要:pro: sol: 建出ac自动机。 一个合法的答案对应一条路径满足从一个scc走到另一个scc的路径。 发现这个题的方案数有可能是无限的。 会在以下两种情况无限: 因此,去掉无限情况后,环只有简单环,缩点以后随便dp一下即可。
阅读全文
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=3413 显然答案等于模式串si和模板串的每一个后缀的匹配长度之和。 这里忽略了匹配成功的情况,那种情况只需要额外特判一些东西。 显然可以用线段树合并维护出right集合。 按照要求查询即可。 cpp
阅读全文
摘要:SAM真让人头秃。 题面 https://www.luogu.org/problemnew/show/P4770 首先考虑 l=1,r=∣S∣的做法 如果对于ION2018的子串不用判重的话,对ION2017建SAM跑一遍就好了. 此时ION2018的每一个前缀对答案的贡献为前缀长度 匹配长度。 考
阅读全文
摘要:首先有两个结论: 1.后缀自动机具有最简性,即每种不同的子串只会在sam上体现一次,体现形式是sam上一条由root出发的路径。 2.一个字符串不同子串的个数等于所有关键节点的max(x) min(x)+1。证明就是考虑后缀自动机的最简性。 然后,这就是个水题了。 每次插入一个字符后,更新答案即可。
阅读全文
摘要:题面 https://www.lydsy.com/JudgeOnline/problem.php?id=1396 首先,对于题目所说的T在S中只出现一次这个要求, 可以利用后缀自动机的parent树的叶子节点的性质来满足要求。 显然所有满足T在S中只出现过一次的子串就是parent树所有叶子节点的r
阅读全文