传送 这题乍一看觉得无从下手,但只不过是把两个知识点捏到一块罢了。 判断多个串是否为一个串的子串,首先想到AC自动机:把$K$个模板串建成AC自动机,然后在上面dp(记忆化搜索)。 AC自动机上的每一个节点到根的路径都代表一个前缀,所以令$dp[i][j]$表示模板串匹配到节点$i$,文本串匹配到长 ...
分类:
其他好文 时间:
2021-01-05 10:57:25
阅读次数:
0
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3065 多测 卡内存 #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<cmath> # ...
分类:
其他好文 时间:
2020-12-30 11:37:43
阅读次数:
0
problem 给出 \(n\) 个互不包含的字符串,要求你求出一个最短的字符串 \(S\),使得这 \(n\) 个字符串在 \(S\) 中总共至少出现 \(m\) 次,问 \(S\) 最短是多少。 solution 我们首先转化题意: 有 \(n\) 个点,两个点 \(i,j\) 之间的权值为将第 ...
分类:
其他好文 时间:
2020-12-02 11:59:30
阅读次数:
3
参考博客 其实不算很难的一个算法 先建一个 Tire树 ,然后bfs构造 fail 指针 \(Fail\) 的含义 若一个节点 \(i\) 的 \(fail[i] = j\) ,则表示从 \(root\) 到 \(j\) 的字符串是 \(root\) 到 \(i\) 的字符串的一个后缀 AC自动机洛 ...
分类:
其他好文 时间:
2020-11-11 16:13:19
阅读次数:
7
模板 \(Problem:\) 求 \(n\) 个模式串在文本串中出现的次数 \(templete:\) \(Luogu5357\) \(Code\) #include<cstdio> #include<cstring> using namespace std; const int N = 2e5 ...
分类:
其他好文 时间:
2020-10-08 18:13:37
阅读次数:
17
#include <queue> #include <cstdlib> #include <cmath> #include <cstdio> #include <string> #include <cstring> #include <iostream> #include <algorithm> u ...
分类:
其他好文 时间:
2020-10-06 20:54:49
阅读次数:
33
题目描述 题解 知道是分块之后就不难了 把n分块,对于整块建AC自动机暴力跑,散块把全部串建AC自动机之后可以线段树查子树(因为往上查要考虑那些能查那些不能所以不好搞),也可以递归子树时用 出-入 计算 空间卡一卡可以$n\sqrt n$,如果再把询问[L,R]前缀和一下之后也许可以做到线性 时间O ...
分类:
其他好文 时间:
2020-09-21 11:52:07
阅读次数:
32
题意:你被给予了一个整数值x还有一个由1~9的数字组成的字符串。 让我们定义$f(l,r)$为$s[l...r]$之间的数字和。 让我们称一个子串$s[l_{1}...r_{1}]$为$x-prime$的,如果 \(f(l_{1}, r_{1}) = x\) 不存在值$l_{2}, r_{2}$使得 ...
分类:
其他好文 时间:
2020-09-08 20:46:23
阅读次数:
47
AC自动机利用trie树可以高效解决有关多个字符串的问题。 Trie树 也称字典树,它的本质是使得字符串集合$S$构成一棵树,其中边权记录字符信息。 它的根到任意节点的路径对应集合$S$中某一字符串的前缀。 任意节点向深度增大的方向经过的路径对应$S$中某一字符串的子串。 比如下面这一棵$\text ...
分类:
其他好文 时间:
2020-08-06 16:58:02
阅读次数:
60