摘要: 这道题目观察样例的输出就可以知道需要用trie树 然后用样例模拟一遍就可以发现,添加相当于在trie树上向下走一步,删除相当于在trie树上向上走一步 分析题目可知每条边最少被走两遍,除了最后的那一个单词所包含的边 所以我们找出最长的单词就可以了,最后走那一个单词,在trie树上dfs 阅读全文
posted @ 2024-01-24 19:51 最爱丁珰 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 这道题目可以使用转换对象法:比如说添加操作,我们不妨将已知字符串删去一个字符(每个已知字符串可以产生\(20\)个新字符串),然后再建立trie树,然后让查询字符串在trie树上面找就可以了 也可以直接枚举每个查询字符串编辑距离为\(1\)的字符串,然后在trie树上查找 也要学会一种新算法:tri 阅读全文
posted @ 2024-01-24 19:35 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 这道题目主要是细节问题 注意矛盾是形成了环 注意有前缀也不可能排第一 阅读全文
posted @ 2024-01-24 18:33 最爱丁珰 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 这道题目主要就是提醒一下看清楚空间要求 但是有一说一,对询问建trie不如直接STL 阅读全文
posted @ 2024-01-24 18:09 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 看这篇题解 解释一下 首先是状态的定义,具体来说,\(f[i][j]\)应该表示考虑了准考证前\(i\)位,准考证的后\(j\)位与不吉利数字最多匹配的位数为\(j\),且整个准考证号不包含不吉利数字的方案数 这个最多匹配的意思:比如不吉利数字是\(1212\),准考证号是\(551212\),那么 阅读全文
posted @ 2024-01-24 18:04 最爱丁珰 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 看这篇题解 解释一下: 对于\(f[i]\)来说,如果\(next[i]\)为\(0\),那么\(f[i]=i\),否则的话,答案只有可能是集合{\(next[i],next[next[i]],...\)}中的一个元素,设这个集合为\(S\) 引理:如果一个模式串可以覆盖\(i\),那么这个模式串就 阅读全文
posted @ 2024-01-24 17:28 最爱丁珰 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 这一道题就是求若干个候选项 一个很容易想到的办法就是倍增,但是需要卡常 可以看看洛谷的代代码(不是题解),这种方法可以\(O(1)\)实现转移,很巧合的一个东西 那个\(f\)就是形成的KMP树的节点的深度(相当于还能跳多少次next),原理就是利用上一个位置跳到的地方已经是小于等于\(\frac{ 阅读全文
posted @ 2024-01-24 15:29 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 利用KMP和双端队列 这一道题目中间会删除字符,考虑到这种动态的过程我们一般会用链表,栈或者队列维护 这里为了方便最后的输出用双端队列 考虑KMP的过程,他其实对字符串是不是在连续的一个存储空间里并没有要求,也就是说,如果我们给了一堆字符,即使不是按照字符数组那种放在连续的存储空间里面,只要我们知道 阅读全文
posted @ 2024-01-24 14:51 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑