2021.1.31做题小结

1.[BJWC2011]Matrix

题意:单个母矩阵,判断多个矩阵是否为子矩阵

思路:二维hash

同时注意到使用 map 判断会T掉,但是用 unordered_map 不会

这是因为 map 是红黑树实现,优点在于其有序性,但空间要求高;unordered_map 是哈希表实现,优点在于查找速度快,但哈希表的建立比较耗时间

所以对于那些有顺序要求的问题,用map会更高效一些;对于查找问题,unordered_map会更加高效一些。

2.1734寻找子串位置加强

题意:给出字符串a和字符串b,请你输出b在a中第一次出现的位置

思路:kmp裸题

3.1737寻找字串

题意:同第2题,但母串更多

思路:双倍经验

4.[NOI2014]动物园

题意:http://fzuoj.xndxfz.com/problem/1739

思路:暴力:先求出所有的 next,再不断往上跳,那么跳到的节点中 (next<<1)<i 的个数即为num值

优化:递推,发现 num[i]=num[next[i]]+1

5.「USACO2015FEB」Censoring (Silver)

题意:http://fzuoj.xndxfz.com/problem/2680

思路:题目的难点在于处理删除操作。O(1)删除可以通过链表或者栈的方式

解决删除问题后,由于字串给定,所以直接 hash 可解,正解 kmp

另外一种 O(logn) 处理删除操作的方式是线段树(线段树大法好)

(想法源于:https://www.luogu.com.cn/blog/ywycasm/solution-p4824)

6.「BZOJ3916」friends

题意: http://fzuoj.xndxfz.com/problem/2456

思路:枚举插入的字符,判断剩下的字符串分成两部分后是否相同(hash)即可

总结:对于这种中间有一些奇奇怪怪的字符乱入 而 影响比较操作时 (Eg.day1.企鹅qq)

可以直接假设那一位不存在,然后使用 hash 快速判断

7.[poi2010]beads

题意:给定一个串S,选择一个 k,从 S[1] 开始,将S分为连续的若干段,使得每一段长度为k。令 cnt 为分出来不同的子串个数(翻转后相同算作相同),求最大的 cnt,以及有哪些 k 对应的为 cnt。

思路:枚举 k,求正反两个哈希去重。

注意点:反向hash求 [l,r] 哈希值<==>suf[l-len+1]-suf[l+1] /times pow[len] 其中,len=r-l

8.[poi2006]okr periods of words

题意:对于给定串的每个前缀i,求最长的,使这个字符串重复两边能覆盖原前缀i的前缀(就是前缀i的一个前缀),求所有的这些“前缀的前缀”的长度和

思路:利用 next[] 的性质:前缀i的长度为 next[i] 的前缀和后缀是相等的

这说明:如果有i一个公共前后缀长度为 j ,那么这个前缀 i 就有一个周期为 i-j

(讲得很清楚:https://www.luogu.com.cn/problem/solution/P3435 )

9.[USACO2011FEB]Cow Line

题意:康托展开

思路:模板题

10.「BZOJ2882」工艺

题意:最小表示法

思路:模板题

11.【模板】扩展KMP(Z函数)

题意:RT

思路:模板题

posted @ 2021-01-31 21:13  _Famiglistimo  阅读(91)  评论(0编辑  收藏  举报