CF25E Test】的更多相关文章

https://vjudge.net/problem/CodeForces-25E 题目大意:给三个字符串,求最小串,使得前三个串都是它的子串. ———————————————— 这题虽然是看哈希的时候做的,但上网一查啊全是KMP. 所以果断用KMP做啦! (话说网上的题解长得都一模一样一个字都没改所以就不贴了) 对于三个串共六种排法,排列组合一下然后在把他们重合的部分减去就会是答案. 而发现对于两个字符串ab去重,我们有两种情况: 1.a的尾部是b的头部: 通过KMP解决,输出KMP后(即a被…
嘟嘟嘟 因为只有三个字符串,所以就有一个比较暴力的做法:枚举这三个串所有排列,然后对于每一个排列,减去这三个串两两的公共部分的长度,更新答案. 求公共部分自然想到kmp:比如s[1]接在s[0]后面,那么我们只用把s[0]和s[1]匹配,把s[1]当做模式串,s[0]当做文本串,当s[0]匹配到头的时候,看s[1]匹配到哪,就是这两个串的公共长度. 那么就会有s[1]是s[0]的子串的情况,这时候只记录s[0[的长度,然后再减去s[0]和s[2]的公共长度(我就是因为刚开始忘减了wa了几发).…
正题 题目链接:https://www.luogu.com.cn/problem/CF25E 题目大意 给出三个串,然后求一个最短的串包含这三个串. \(1\leq |s_1|,|s_2|,|s_3|\leq 10^5\) 解题思路 把三个串状压,先跑出\(AC\)自动机和每个节点包含的串的状态. 然后设\(f_{i,s}\)表示目前到节点\(i\),已经包含串的状态是\(s\),然后\(bfs\)转移即可. 时间复杂度\(O(2^3\sum |s|)\) code #include<cstdi…