摘要:
最近新学的三个算法,一直都没写博客,后缀自动机和线性基还有一点小尾巴,争取这两天结束 一、应用场景 求$T$串与$S$串的每个后缀的最长公共前缀 二、算法流程 图片来源 假设当前遍历到S串位置i,即nxtS[0]...nxtS[i - 1]这i个位置的值已经计算得到。设置两个变量,st和pos。po 阅读全文
摘要:
参照博客 后缀数组 定义: 后缀就是从字符串的某个位置i到字符串末尾的子串,我们定义以s的第i个字符为第一个元素的后缀为$suff(i)$ 辅助数组: \(sa_i\):表示排名为$i$的后缀的起始位置的下标 \(rk_i\):表示起始位置的下标为$i$的后缀的排名 \(x_i\):表示起始位置的下 阅读全文
摘要:
1. 最大流 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <queue> #define int long long using namespace std; int r 阅读全文
摘要:
一、FFT的应用场景 \(A(x) \text{=} a_0 \text{+} a_1x+a_2x^2+……+a_nx^n\) \(B(x) \text{=} b_0 \text{+} b_1x+b_2x^2+……+b_mx^m\) \(C(x) \text{=} A(x)\times B(x)\) 阅读全文
摘要:
都是自己手写的,重载运算符用起来也比较方便 #include <cstdio> #include <algorithm> #include <iostream> #include <cstring> using namespace std; int read(){ int x = 1,a = 0;c 阅读全文
摘要:
一、分块 分块的基本思想是,通过对原数据的适当划分,并在划分后的每一个块上预处理部分信息,从而较一般的暴力算法取得更优的时间复杂度。 我们将序列按每$s=\sqrt$个元素一块进行分块,并记录每块的区间和$sum_i$。 \(\begin{matrix}\underbrace{a_1+a_2+... 阅读全文
摘要:
联赛 基础算法 贪心,枚举,分治,倍增,构造,高精,模拟,分数规划,二分 图论 图 最短路(dijkstra、spfa、floyd),差分约束 最小生成树(kruskal、prim) 拓扑排序 二分图染色,二分图匹配 tarjan 树 树上倍增(LCA) 树的直径,树的重心 dfs序 树链剖分 数论 阅读全文
摘要:
T1 problem $n$个石子,两个人选,每个人可以选$a$个或$b$个,问是否存在先手必胜的策略 solution 当$n \mod (a+b) < min(a,b)$时,当我先手选$a$,后手可以选$b$,先手选$b$,后手可以选$a$,可以保证最后一次后手选完后剩下的石子$<min(a,b 阅读全文
摘要:
一些经典的问题: 求各个模式串在文本串中出现了几次: 方法: 在AC自动机上先跑一边文本串,记录一下每个点被经过的次数,那么单词被经过的次数就是他的结尾在fail树中的子树的权值和 找是否有一个匹配不上匹配串的环: 方法: 把所有能匹配上匹配串的节点匹配记录下来,dfs从跟开始走所有我可以走的点,如 阅读全文
摘要:
problem 给出 \(n\) 个互不包含的字符串,要求你求出一个最短的字符串 \(S\),使得这 \(n\) 个字符串在 \(S\) 中总共至少出现 \(m\) 次,问 \(S\) 最短是多少。 solution 我们首先转化题意: 有 \(n\) 个点,两个点 \(i,j\) 之间的权值为将第 阅读全文