摘要:http://codeforces.com/contest/914/problem/F 以前做过一个类似的,但是查询的子串长度最多是10,这个时候就是用bit + hash做了。这是因为改变一个字符,只需改变它后面10个的hash值就够了,多余的不影响,因为查询去不到那里。(只记得是今年的网络赛来的
阅读全文
摘要:https://buaacoding.cn/contest-ng/index.html#/188/problems 其实这题挺简单的。 注意到答案的大小最多是22 二分,check长度是mid的不同子串有多少个,然后,如果不是1 << mid个,那么肯定是不行的。 想到了这个,我居然用了字符串has
阅读全文
摘要:Consider n given non-empty strings denoted by s1 , s2 , · · · , sn . Now for each of them, you need to select a corresponding suffix, denoted by suf1,
阅读全文
摘要:http://codeforces.com/gym/101138/problem/A 感觉有一种套路就是总长度 <= 某一个数的这类题,大多可以分块 首先把集合串按长度分块,对于每一个询问串, 在 > magic的big集合里,因为最多sqrtn个,可以暴力枚举每一个,然后暴力枚举询问串的每一个长度
阅读全文
摘要:http://acm.split.hdu.edu.cn/showproblem.php?pid=2222 #include <cstdio> #include <cstdlib> #include <cstring> const int maxn = 1000000 + 20; const int
阅读全文
摘要:http://hihocoder.com/problemset/problem/1413?sid=1199641 这题断断续续做了2个多星期吧,一直不会 设总答案为sum,替换后新加的子串数量为x,失去的是y,那么每个位置的答案就是sum + x[i] - y[i] 首先可以知道如果把某个位置设置成
阅读全文
摘要:https://vjudge.net/problem/HDU-6208 首先可以知道最长那个串肯定是答案 然后,相当于用n - 1个模式串去匹配这个主串,看看有多少个能匹配。 普通kmp的话,每次都要O(mxLen)的复杂度肯定不行。考虑AC自动机,不说这个算法了都懂。 大概就是,询问主串的时候用F
阅读全文
摘要:http://blog.csdn.net/gatevin/article/details/45875343 题目是求不重叠的不同子串个数 一般来说, endpos集合包含了子串结尾位置,结尾在"3、4、6"等 每个状态都包含了若干个连续子串。就是"aabab", "abbab", "bbab", "
阅读全文
摘要:http://codeforces.com/problemset/problem/452/E 多个主串的模型。 建立一个广义后缀自动机,可以dp出每个状态的endpos集合大小。同时也维护一个R[]表示那个串出现过。 所以可以算出每个状态的dp[i][k]表示第k个串在第i个状态中出现的次数。 可以
阅读全文
摘要:https://vjudge.net/problem/LightOJ-1427 把所有模式串加入ac自动机,然后search的时候暴力,每个子串都暴力一下就好。 其实AC自动机就是,先建立好trie图。预处理加速查找 然后查找有多少个模式串的时候,相当于一个暴力, 每一次循环,其实就是枚举文本串的每
阅读全文
摘要:http://codeforces.com/contest/427/problem/D 题目是找出两个串的最短公共子串,并且在两个串中出现的次数只能是1次。 正解好像是dp啥的,但是用sam可以方便很多,复杂度n^2 首先对两个串建立sam,拓扑dp出endpos集合的大小,然后枚举第二个串的所有子
阅读全文
摘要:题目描述 给出一个n * m的矩阵。让你从中发现一个最大的正方形。使得这样子的正方形在矩阵中出现了至少两次。输出最大正方形的边长。 输入描述: 第一行两个整数n, m代表矩阵的长和宽; 接下来n行,每行m个字符(小写字母),表示矩阵; 输出描述: 输出一个整数表示满足条件的最大正方形的边长。http
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=5510 想了很久队友叫我用ufs + kmp暴力过去了。 fa[x] = y表示x是y的子串,所以只有fa[x] == x才需要kmp一次。 那么这样的话,如果全部都不互为子串的话,复杂度还是爆咋的。 #inclu
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=5920 http://www.cnblogs.com/xudong-bupt/p/4015226.html 把前半部分复制过去,如果太大,那么早到第一个会使得其太大的点,减1,然后对应的中间的变成9 #includ
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=5558 对于每个后缀suffix(i),想要在前面i - 1个suffix中找到一个pos,使得LCP最大。这样做O(n^2) 考虑到对于每一个suffix(i),最长的LCP肯定在和他排名相近的地方取得。 按排名
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=5069 首先判断suffix和prefix最长多少可以直接暴力枚举长度然后 + hash可以立马判断是否相等,复杂度O(lenstr) 现在知道总长度 <= 1e5, magic = sqrt(lenstr) 那么
阅读全文
摘要:因为明天要讲解后缀自动机了,所以只能抱抱佛脚,临时做做题目。其实很久以前看过,但是不太懂,看的是clj的原文,不太懂。现在只能临时看看是怎么弄的,应付下。 1、自动机A为后缀自动机,A(sub) = true当且仅当sub是str的后缀。 2、一个较差的和后缀自动机有相同功能的东西是trie,把所有
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2243 这是一题AC自动机 + 矩阵快速幂的题目, 首先知道总答案应该是26^1 + 26^2 + 26^3 .... + 26^L,用等比数列的前n项和是无法做的,因为出现小数。 这个可以直接看到F[n] = 2
阅读全文
摘要:http://poj.org/problem?id=2778 首先将病毒串假如去AC自动机上。然后构造trie图后。 题目是要构造一个长度为len的,不包含那些病毒的串,的种类数。 转化题目,就是要求在root点上,走len步,能有多少种情况不走到病毒串上。 那么,对于每一个AC自动机上的节点,我们
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2457 首先把病毒串保存一下,然后对于每一个trie上的节点,跑一发AC自动机,建立一个trie图。 建立的时候,对应做一些修改。 比如,现在建立成了这个样子。 如果he是一个病毒串,那么应该相对应的,把she那个
阅读全文