POJ 1002 - 487-3279(基础)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1002
题意:略
解法:二叉查找数,map,快排...
POJ 1200 - Crazy Search(基础)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1200
题意:找出不相同的子串数量,字母表大小和子串长度会给定,这题很推荐hash入门者一做
解法:hash(建议karp-rabin)
POJ 1204 - Word Puzzles(基础)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1204
题意:基本多串匹配
解法:多串匹配自动机(单串去弄肯定会超时)
POJ 1229 - Wild Domains(中等)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1229
题意:模糊匹配
解法:dp
POJ 1625 - Censored!(中等)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1625
题意:求长度为n不包括给定模式串的字符串数量。(题意同2778,但不能按2778的方法,建议先做此题,再做2778)
解法:Aho-Corasick自动机 + dp
相关:http://hi.baidu.com/zfy0701/blog/item/c62f41afca8180ca7cd92a19.html
POJ 1743 - Musical Theme(中等)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1743
题意:找一个串中最长不重叠子串
解法:后缀数组+二分枚举答案,后缀数组+栈扫描,RK+二分枚举答案
相关:http://hi.baidu.com/zfy0701/blog/item/f2278a0928991dca3bc763a0.html
http://acm.pku.edu.cn/JudgeOnline/problem?id=1816
题意:扩展多串模式匹配(含?, *)
解法:Trie + dfs,有兴趣也可用基于位并行的自动机(可参考柔性字符串匹配,扩展匹配章节)
POJ 2185 - Milking Grid(中等)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2185
题意:最小矩型的覆盖
解法:KMP (不多的KMP好题)
相关:http://acm.pku.edu.cn/JudgeOnline/showmessage?message_id=33571
POJ 2513 - Colored Sticks(基础)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2513
题意:转化成欧拉回路
解法:并查集+hash,并查集+Trie
POJ 2774 - Long Long Message(中等)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2774
题意:找两个串的公共最长子串
解法:后缀数组,Oracle Factor自动机,后缀自动机
相关:http://hi.baidu.com/zfy0701/blog/item/f2278a0928991dca3bc763a0.html
http://hi.baidu.com/zfy0701/blog/item/d9fedbd14581113d9b5027ab.html
POJ 2778 - DNA Sequence(中等)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2778
题意:求长度为n不包括给定模式串的字符串数量。
解法:Aho-Corasick自动机(前缀树) + 矩阵快速乘法
相关:http://hi.baidu.com/zfy0701/blog/item/f2278a0928991dca3bc763a0.html
类似于1625,建议先做1625
POJ 1699 - Best Sequence(基础)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1699
题意:转换为TSP问题(注意子串的包含关系!)
解法:回溯,状态dp
POJ 3376 - Finding Palindromes(中等)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3376
题意:找回文串组合
解法:找出规律,然后Trie + kmp推广形式
POJ 3415 - Common Substrings(较难)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3415
题意:统计两个串中长度>=k的公共子串的数量
解法:后缀数组+栈扫描,后缀自动机
相关:http://hi.baidu.com/zfy0701/blog/item/f2278a0928991dca3bc763a0.html
POJ 3080 - Blue Jeans(如果用暴力,就很简单)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3080
题意:求n个串的最长公共子串
解法:后缀数组+栈扫描,后缀数组+二分枚举,暴力
相关:http://hi.baidu.com/zfy0701/blog/item/57ada7edf5f44ed1b31cb1cc.html
POJ 3208 - Apocalypse Someday(较难)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3208
题意:略
解法:有意思的自动机dp
POJ 3261 - Milk Patterns(中等)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3261
题意:求一个串中重复出现至少k次的最长子串
解法:后缀数组+栈扫描,hash + 二分
POJ 3294 - Life Forms(较难,强烈推荐)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3294
题意:n个串中,为大于n/2个串所共有的所有最长子串
解法:后缀数组+栈扫描,暴力(很容易被卡掉),后缀数组+线段树(?)
相关:http://hi.baidu.com/zfy0701/blog/item/57ada7edf5f44ed1b31cb1cc.html
POJ 3576 - Language Recognition(中等)
[耗子写过]
题意:给定一些单词,让你用一个状态数最小的DFA表示这些单词,求最小的状态数.
解法 : 这里不用去套编译书上的子集划分的方法,由于这个DFA一定没有环, 所以合并两个集合,实际上是判两个子树是否相等,注意终态和非终态的判断.hash判有多少棵不相同的树即可,
数据和标程:链
POJ 3581 - Sequence(中等)
题意:把原串分三段并反转,求字典序最小的那串
解法:
POJ 3630 - Phone List(基础,强烈推荐用此题练Trie)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3630
题意:给n个串,看是否有一个串是另一个串的前缀
解法:快排,Trie
POJ 3690 - Constellations(基础)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3690
题意:二维串匹配
解法:转换为一维,或者用多串匹配
[耗子读过]
题意:给你一些有害的DNA片断(长度<20, 数量<50),和一个DNA序列,对该序列进行最少的修改,使之不包含任何有害片断.一次修改只能是替换一个字符
解法:建造一个ac自动机,开始dp,用滚动数组转移,状态表示到达当前状态并且没有有害片断所需的最小修改量.
POJ 3693 - Maximum repetition substring(难)
[耗子读过]
题意:求最循环节最多的子串
解法:09年论文上的例题,后缀数组
zyf0701说:我所知道的最好的做法应该是先做s-factorization(也就是lempel-ziv),然后在分解之后的每一段中枚举周期,周期可以通过推导关系式确定是否合法,然后可确定循环次数,取最大的,中间还用到了对kmp的扩展。具体来说有KK算法,和ML算法两种,其中ML不能遍历所有的runs。
其他OJ:
[耗子读过]
题意:对于每个前缀x定义 L(x) = x的连续重复串在原串上能覆盖的最长距离,起点固定. 求L(1)+L(2)+...+L(N)的值.
解法:先求出所有后缀与原串的最长公共前缀.然后枚举x,每次倍增的跳跃,时间nlogn
空罐 Cans
[耗子读过]
题意:描述很长,自己看吧
解法:建好ac自动机,然后开始dp
HDOJ 2471 - History of Languages(杭州现场赛)
[耗子读过]
题意:给两个DFA,判断他们是否相等.要求复杂度至少O(n^2)
神奇的解法令人膜拜: 链
HDU 2967 - Morphing is fun
http://acm.hdu.edu.cn/showproblem.php?pid=2967
UVA上也过得人比较少的一道题,需要分情况讨论几种情况