随笔分类 - 字符串
摘要:反思 三维的dp压根没看出来,看题解以后思路又很直观,找几道字符串dp练练才行 序列自动机和优化一维略 C++ / __ __ ____| |_____| |____ | | | __ | | | | include include include include include include i
阅读全文
摘要:要点 显然ac自动机的板子就可以暴力一下答案了 为了优化时间复杂度,考虑套路fail树的dfs序。发现本题需要当前这个尾点加上所有祖先点的个数,考虑使用树状数组差分一下,在父点+1,在子树后 1,每次询问前缀和即可 C++ include include include include includ
阅读全文
摘要:要点 头尾的最长相同只要一个kmp即可得,于是处理中间部分 扫一遍记录一下前缀的每个位置是否存在一个中间串跟它相同,见代码 如果当前没有,接着用Next数组去一找即可 C++ include include const int maxn = 1e6 + 5; char s[maxn]; int Ne
阅读全文
摘要:要点 $dp[i][j][k]$表示主串已经到第$i$位时,$s$匹配在$j$位、$t$匹配在$k$位的最大得分 本来就要试填一层循环,如果转移也写在循环里的化复杂度承受不了,于是开两个表kmp预处理一下。 C++ include include include using namespace st
阅读全文
摘要:要点 ~~这是一道蔡队题,看我标题行事~~ 任意询问y串上有多少个x串,暴力找每个节点是不是结尾肯定是炸的,考虑本质:如果某节点是x的结尾,根据ac自动机的性质,x一定是此(子)串后缀。又有每个Trie节点的fail只指向另一个节点,故有fail树的概念。问题就变成了 “对于串x的尾节点,在fail
阅读全文
摘要:要点 并没问具体方案,说明很可能不是构造。 思考不断读入这个文本串,然后中间不出现某些文法的串。啊,这就是个自动机。 将不合法串使用ac自动机构成一个Trie图,我们需要的字符串就是在这个自动机上无限走路但是却不会撞到危险节点。 这样只要从根开始跑dfs判有环即存在答案。 注意还要加上ac自动机的性
阅读全文
摘要:要点 因为当前最大字符只有一个且两边是回文的,所以如果答案包含最大字符则一定是重合部分。 若不包含,则用此字符将两个区间分别断为两部分,则共有四种组合,答案一定为其中之一。 C++ include include using namespace std; int l1, l2, r1, r2; in
阅读全文
摘要:要点 本题使用$O(n^2)$的算法 外层枚举左端点,内层一直kmp到结尾,中间遇到合法的就ans++ 如果是acccca这种数据直接kmp过程顺手判断即可;但是aaa这种数据,j = 2,实际判断是不合法的,也就是说,其实只要Next里有合法的即本串合法,因此多开Num数组记录 C++ inclu
阅读全文
摘要:常规dp。看到数据很小就直接暴力了,没有预处理。kmp好像过分了…… C++ include include include include include include using namespace std; int n, k, t, dp[205][45]; string T = " ",
阅读全文
摘要:为了物尽其用,Next求出最多有哪部分能重复使用,然后重复使用就行了…… C++ const int maxn = 5e5 + 5; char s[maxn], t[maxn]; int cnts0, cnts1, cntt0, cntt1; int Next[maxn]; int main() {
阅读全文
摘要:Update:smz说regex秒过Orz,yzd记在这里了。 听说今年天梯赛有个烦人的模拟,我便被队友逼着试做一下……一发15,二发20.记一记,要不然枉费我写这么久…… 自己还是代码能力太菜了,校内大佬依旧随手A过去,你吉老师该AK还是AK…… 调调改改的,很丑,懒得优化写法了。 大概思路就是先
阅读全文
摘要:样例手写一写很容易发现规律(前后一样的串,则ans+=2),实现起来却忘了string的便捷性,其实根本用不到哈希。
阅读全文
摘要:输入给出了最小循环节长度,暗示next数组。 然后自己按照自己的kmp板子逆着来一遍就好。
阅读全文
摘要:对于某个位置i,i - Next[i]是循环节长度,i整除(i - Next[i])时是完整的几个循环元。
阅读全文
摘要:查了半天数组越界的RE,才发现自己把ch数组放结构体里是过大的……放全局就A了。 类似区间的dp比较显然,只是用trie树做了优化,使得可以在trie树里一边走一边往上加dp值,不必枚举以前的每个位置了,省去了很多不必要状态。复杂度就O(n*Trie)。 终于比刘汝佳的代码优雅了(弥天大雾)
阅读全文
摘要:传送门 结论是:一定是选取最长的那个AB连续子串。 把题面要求的a*b + a + b转化一下成(a + 1)*(b + 1) - 1,即可发现如果选取前缀后缀不连续的两段作为答案,则显然有更优解,即两段中较长的一段作为答案。
阅读全文
摘要:PenguinQQ是中国最大、最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志、群、即时通讯、相册、集市等丰富强大的互联网功能体验,满足用户对社交、资讯、娱乐、交易等多方面的需求。 小Q是PenguinQQ网站的管理员,他最近在进行一项有
阅读全文