
ACM算法总结
瓴龍
这个作者很懒,什么都没留下…
展开
-
BigInteger 大整数类(C++)
有时候需要用到大整数,这里放一个自己写的大整数结构体(BigInteger),实现的功能如下:输入输出;四则运算;比较运算;幂运算;其中乘法运算和除法运算都是 O(n2)O(n^2)O(n2) 的复杂度。struct BigInteger{ #define SIZE(x) ((int)x.size()) std::vector<int> x; // 从低位往高位存储 bool sign; // 0:+ 1:- // 构造 Big..原创 2020-08-10 22:59:44 · 1256 阅读 · 0 评论 -
ACM算法总结 prufer序列
prufer序列就是一一对应一棵无根树的一个序列。对于一棵 n 个结点的无根树,它的 prufer序列有 n-2 个数,它们之间相互转换关系如下:无根树 转换为 prufer序列: 每次选择编号最小的叶子结点,然后把与它相连的结点加入 prufer序列中,然后删掉这个结点,直到剩下两个结点为止。prufer序列 转换为 无根树: 定义未选择的结点集合 S,一开始 S 是一个 1-n 的全集,然后遍历prufer序列,每次选择不在 prufer序列里面的最小编号的结点,与当前遍历到的结点连边,然后..原创 2020-08-09 16:22:30 · 363 阅读 · 2 评论 -
ACM算法总结 数论(二)
目录原根质因数分解卢卡斯定理(Lucas)数论分块莫比乌斯反演杜教筛威尔逊定理原根若(a,m)=1(a,m)=1(a,m)=1,使得ax≡1(mod m)a^x \equiv 1(mod \ m)ax≡1(mod m) 成立的最小的xxx,称为aaa关于模mmm的阶,记为ordmaord_maordma 。若ordma=xord_ma=xordma=x,则 ordmat=x(t,x)ord_ma^t=\frac{x}{(t,x)}ordmat=(t,x)x ;ord原创 2020-08-02 12:26:58 · 261 阅读 · 0 评论 -
ACM算法总结 数论(一)
目录快速幂龟速乘费马小定理欧拉函数欧拉定理扩展欧拉定理素性测试裴蜀定理&扩展欧几里得逆元线性求n个数的逆元线性求任意n个数的逆元中国剩余定理(CRT)快速幂int ksm(int x,int n,int M){ //if(!x && !n) return 0; int ret=1; while(n) { if(n&1) ret=1ll*ret*x%M; x=1ll*x*x%M; n>&g原创 2020-08-02 12:19:30 · 424 阅读 · 1 评论 -
ACM算法总结 线性递推(BM)
BM算法,全称是Berlekamp-Massey算法,给出某个其次的线性递推数列的前面若干项,它可以自动算出这个齐次式,以及计算出后面第 K 项的值。我依然不理解这个算法,这里只是记录一下有这个东西。代码:const int maxn=40005;const LL M=998244353;struct linear_sequence{ LL res[maxn],base[maxn],_c[maxn],_md[maxn]; VI Md; LL ksm(LL x,LL n..原创 2020-08-02 10:48:18 · 1072 阅读 · 0 评论 -
ACM算法总结 一般图最大匹配
也就是在无向图中,两个结点之间有边表示这两个点可以匹配,然后要求出最大匹配。该算法为带花树,我现在并不理解它,只是当个板子记下来。const int maxn=1005;const int maxm=1e6+5;struct daihuashu{ struct edge {int v,nxt;} e[maxm]; int n,m,que[maxm],ql,qr,pre[maxn],tim=0,ans=0; int h[maxn],tot=0,match[maxn],f[..原创 2020-07-31 09:39:00 · 467 阅读 · 0 评论 -
ACM算法总结 生成函数
也叫母函数,常用来解决组合方面的问题。一个常见的例子如下:有 n 种硬币,每一种硬币的面值为 aia_iai ,数目为 cic_ici ,问用这些硬币可以组合出哪些数值的面值,并且各自有多少种组合方法。这显然是一个背包问题,但是我们考虑用生成函数来解决。一般来说普通的母函数为这样的形式 a0+a1x+a2x2+...+anxna_0+a_1x+a_2x^2+...+a_nx^na0+a1x+a2x2+...+anxn ,系数表示方案数,指数表示方案的状态。对于上面那个问题,可以转化..原创 2020-07-29 11:50:16 · 584 阅读 · 0 评论 -
ACM算法总结 动态规划(二)(dp优化)
目录线段树优化dp单调队列优化dp分治优化dp斜率优化dp线段树优化dp当递推的时候,整个区间的变化都是一样的,就可以考虑用线段树加速dp递推。单调队列优化dp对于某一个 i 进行 dp 时,其左边的最优决策点假如是 j,如果 j 随着 i 的增长是单调递增的,那么可以用单调队列优化:队首是最优决策点,然后每次把不符合条件的队首弹出,把更劣的队尾弹出,然后把当前决策点加入队尾。这样保证每个点入队一次出队一次,复杂度为 O(n)O(n)O(n) 。比如对于这道题 烽火传递 :有 n原创 2020-07-09 11:00:43 · 483 阅读 · 0 评论 -
ACM算法总结 字符串(三)
目录带通配符的单模式匹配带通配符的单模式匹配平常的单模式匹配就是给出一个模式串 t,给出一个文本串 s,问 s 中能够在哪些位点完全匹配 t,这个用 KMP 可以很好地解决。但是如果在模式串和文本串中有一些通配符,也就是这些符号匹配什么都可以,那这样就解决不了了。比如说 t=a*b ,s=aebr*ob,其中 * 表示通配符,那么 t 在 s 中可以匹配的位点为 1 5(下标从 1 开始)。解决办法本质上是把匹配转变为一个数学公式 G(x),表示模式串在原串的 x 处的匹配公式,并且这个 G(x原创 2020-05-31 20:24:05 · 225 阅读 · 0 评论 -
ACM算法总结 数据结构(四)(pb_ds库)
目录简介Hash表HeapTree简介pb_ds 全称为 Policy-Based Data Structures,里面定义了很多比 STL 更实用的数据结构,直接好处就是比如你要用一个 Treap 去维护某些数据,本来要写几十行的 Treap,现在只用几行代码就可以定义一个这样的结构出来。使用 pb_ds 需要的头文件以及一些命名空间的申明:#include <ext/pb_d...原创 2020-05-04 14:17:20 · 1058 阅读 · 0 评论 -
ACM算法总结 动态规划(一)
目录简介经典问题最长上升子序列区间dp树形dp简介动态规划,dynamic programming,简称 dp,通过把原问题分解成更小的子问题来解决问题,适用于有重叠子问题和最优子结构的问题。重叠子问题是指某一个子问题的答案可能被多个更大的问题使用到,而最优子结构是指当更大的问题满足最优解时该子问题也满足这个解。所以,当我们使用动态规划解决某一个状态的最优化问题时,往往需要用到之前的某些...原创 2020-02-01 11:02:30 · 398 阅读 · 0 评论 -
ACM算法总结 数据结构(三)(可持久化数据结构)
数据结构(三)可持久化线段树之所以说这种结构可持久化,是因为它存储了历史版本信息。对于可持久化线段树来说,我们可以找到任何历史修改版本的区间信息。不论是单点修改,还是区间修改,线段树+懒惰标记就决定了每次修改的复杂度是 O(logn) 级别的,也就是说,每次修改只会改变 logn 个结点的值。那么我们对于当前的新线段树,就只用建立 logn 个新结点,所以总空间复杂度是 O(nlogn)...原创 2020-01-31 10:51:37 · 385 阅读 · 0 评论 -
ACM算法总结 树上问题
目录简介树的直径树的重心树链剖分LCA点分治简介树是一种联通无向非循环图,对于 n 个结点的树来说有 n-1 条边;如果不要求联通,我们称之为森林。在数据结构中有很多实用的树形结构,但是大多数都是基于二叉树的结构,这里更多地讨论一般树形结构。关于树的一些名词定义:根:人为指定的一个结点;结点深度:从根结点到该结点的路径上的边数;树的高度:结点深度的最大值;叶结点:度数为 1 ...原创 2020-01-27 10:01:24 · 1215 阅读 · 0 评论 -
ACM算法总结 数据结构(二)(树)
目录二叉搜索树堆TreapSplay(伸展树)一般我们考虑的树都是无向树,即联通非循环图(也就是联通无向图中没有环),如果为非联通非循环图,我们称之为森林。而在树形结构中,二叉树具有很多很好的性质,也有很多有用的应用,所以一般都以二叉树为基础进行讨论。二叉搜索树一种中序遍历为原序列的树形结构,对于每一个子树,左儿子比自己小,右儿子比自己大,如果必要的话,可以给每个结点加权,记录每...原创 2020-01-20 13:26:37 · 503 阅读 · 0 评论 -
ACM算法总结 数据结构(一)
目录基本数据结构并查集st表线段树单调队列基本数据结构最基本的数据结构有栈、队列、链表、堆等等,除了链表之外,C++的STL都有相应的实现。栈:stack<type>,push() ,pop() ,top()等;队列:queue<type>,push(),pop(),front() 等;堆:priority_queue<type>(priori...原创 2020-01-19 09:51:52 · 791 阅读 · 0 评论 -
ACM算法总结 图论(三)
目录强连通分量割顶和桥双连通分量2-SAT强连通分量有向图的强连通分量是指有向图的极大强联通子图,在这个子图中,任意两点相互可达。一个图强联通当且仅当存在一个包含所有顶点的有向回路;对于下图这个例子来说:强连通分量分别为 {1},{2},{3},{4},{5,6,7,8,9}\{1\},\{2\},\{3\},\{4\},\{5,6,7,8,9\}{1},{2},{3},{4},...原创 2020-01-14 10:50:08 · 515 阅读 · 0 评论 -
ACM算法总结 图论(二)
目录单源最短路差分约束系统分层图多源最短路欧拉图哈密顿图单源最短路给定一个有向图或者无向图G,给定一个原点s,求解从s出发到各个顶点的最短距离,就是单源最短路问题。一般单源最短路有两种简洁高效的求解方法:dijkstra和SPFA。dijkstra(迪杰斯特拉)算法的主要思想就是:每次从未确定的结点中选择距离最短的那个,然后把它确定下来(这里确定是指认为当前距离就是从s到这个结点的最短距离...原创 2020-01-09 22:10:06 · 344 阅读 · 0 评论 -
ACM算法总结 图论(一)
目录概述图的遍历二分图判断拓扑排序最小生成树最小树形图概述图的严格定义是一个表达式 G=<V,E,Ψ>G=<V,E,\Psi>G=<V,E,Ψ> ,其中V表示点集,E表示边集,Ψ\PsiΨ表示边与点的映射关系。如果 Ψ:E→{{v1,v2} ∣ v1∈V,v2∈V}\Psi: E \rightarrow \{\{v_1,...原创 2020-01-09 13:35:27 · 1021 阅读 · 0 评论 -
ACM算法总结 字符串(二)
目录后缀数组LCP(最长公共前缀)后缀自动机回文树后缀数组后缀数组(suffix-array)的前置知识是基数排序,而基数排序基于稳定的计数排序,基数排序的本质是:按照关键字的反优先顺序,对相应关键字进行计数排序,然后更新排名函数 rkrkrk 。rk[i]rk[i]rk[i] 记录了当前排名为 iii 的数据在原数组中的下标。接下来关于后缀数组的所有算法的下标都从1开始。后缀数组 sa...原创 2020-01-04 21:18:03 · 408 阅读 · 0 评论 -
ACM算法总结 字符串(一)
目录KMP扩展KMPmanacherTrie树AC自动机KMP字符串匹配算法,在 O(n+m) 的时间内计算出模式串 s 在文本串 t 中出现的次数。这个算法不仅仅适用于字符串的处理,只要是任何类似的匹配问题都可以使用。KMP算法的核心思想是在匹配失败时,最大限度地利用之前的匹配信息,以减少需要重复匹配的字符串长度。为了运用之前的匹配信息,我们需要知道每个位置匹配失败需要跳转到模式串的...原创 2020-01-03 18:02:20 · 563 阅读 · 0 评论 -
ACM算法总结 平面几何
平面几何基础知识像一些点、向量、点乘、叉乘、圆等等知识,应该都是最基本的平面几何知识,这里就不再赘述,主要考虑如何实现这些平面几何的运算。首先是定义一些常量和宏定义:#define RAD(x) (pi*x/180)#define DEG(x) (x*180/pi)const double eps=1e-8;const double pi=acos(-1);int dcmp(d...原创 2019-11-16 22:12:49 · 637 阅读 · 0 评论 -
ACM算法总结 网络流
文章目录基础知识上下界可行流最小费用流二分图闭合图基础知识在图论中,网络流是指在带权有向图G=(V,E,C)G=(V,E,C)G=(V,E,C) 上为每条边分配流量,从而最优化某一属性。网络流图中有且仅有一个源点,有且仅有一个汇点,并且必须满足以下条件:容量限制:一条弧上的流量不能超过其容量限制 f(u,v)≤c(u,v)f(u,v)\leq c(u,v)f(u,v)≤c(u,v)流...原创 2019-11-06 15:24:18 · 729 阅读 · 0 评论 -
ACM算法总结 FFT与MTT
FFT全称为快速傅里叶变换,利用复数运算实现DFT与IDFT的快速算法,常用于多项式系数的卷积加速。多项式表示方法一般有两种:系数表示和点值表示。DFT实际上对应系数到点值的变换,IDFT对应点值到系数的变换。FFT采用分治的思想,结合蝴蝶变换化递归为迭代,通过取特殊点——复数域的单位根 ωnk\omega_n^kωnk (注意因果关系,分治的可行性是基于单位根的选取的)来实现时间复杂...原创 2019-11-02 13:55:30 · 1046 阅读 · 0 评论