模板
wineandchord
这个作者很懒,什么都没留下…
展开
-
洛谷 P3807 【模板】卢卡斯定理
给 n,m,pn,m,pn,m,p ,求 Cn+mn mod pC_{n+m}^n\bmod pCn+mnmodp ,保证 ppp 为质数 Lucas 定理,用来求大组合数取模,定理为: Cnm mod p=C⌊n/p⌋⌊m/p⌋Cn mod pm mod p mod p C_n^m\bmod p=C_{\lfloor n/p\rfloor}^{\lfloor m/p\rfloor}C_{n\bmod p}^{m\bmod p}\bmod p Cnmmodp=C⌊n/p⌋⌊m/p⌋Cnmodpmmod原创 2020-06-27 21:18:58 · 133 阅读 · 0 评论 -
洛谷 P3389 【模板】高斯消元法
求解一个线性方程组 思路:高斯消元 流程: 枚举每一列 iii 找该列最大值所在的行,将该行和 iii 行进行交换 消元,参考代码 #include<iostream> #include<cstdio> #include<cmath> #define MAXN 110 using namespace std; int n;double a[MAXN][MAXN]; int main(){ #ifdef WINE freopen("data.in","r",st原创 2020-06-27 20:27:57 · 86 阅读 · 0 评论 -
洛谷 P3377 【模板】左偏树(可并堆)
有 nnn 个小根堆,每个堆只有一个数,进行两种操作: 1 x y 将第 x,yx,yx,y 个数分别在的小根堆合并 2 x 输出第 xxx 个数所在的的堆的最小数,并将其删除,有多个则删除最先输入的,若第 xxx 个数已删除,则输出 −1-1−1 思路:左偏树 #include<iostream> #include<cstdio> #define ls s[x].son[0] #define rs s[x].son[1] #define MAXN 100010 using n原创 2020-06-27 20:04:01 · 108 阅读 · 0 评论 -
洛谷 P1939 【模板】矩阵加速(数列)
一个数列 aaa ,满足 ax={1x∈{1,2,3}ax−1+ax−3x≥4 a_x= \begin{cases} 1& x\in\{1,2,3\}\\ a_{x-1}+a_{x-3}& x\ge 4 \end{cases} ax={1ax−1+ax−3x∈{1,2,3}x≥4 求 an mod (109+7)a_n\bmod (10^9+7)anmod(109+7) 思路:将递推转换为矩阵关系,然后用矩阵快速幂 #include<iostream> #includ原创 2020-06-27 17:07:16 · 126 阅读 · 0 评论 -
洛谷 P3390 【模板】矩阵快速幂
给一个矩阵 AAA,求 AkA^kAk 思路:矩阵快速幂,注意 k 要 long long #include<iostream> #include<cstdio> #include<cstring> #define M 1000000007 #define MAXN 110 using namespace std; typedef long long ll; int n; ll k; struct Matrix{ int n;ll a[MAXN][MAXN];原创 2020-06-27 16:44:54 · 92 阅读 · 0 评论 -
洛谷P3385 【模板】负环
SPFA 判负环 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<queue> #define INF 0x3f3f3f3f #define MAXN 2010 #define MAXM 6010 using namespace std; int n,m,T,u...原创 2020-04-05 22:13:58 · 95 阅读 · 0 评论 -
洛谷 P3865 【模板】ST表
ST 表模板。求静态区间最大值。 用 lg[n] 表示 ⌊log2n⌋\lfloor\log_2n\rfloor⌊log2n⌋,预处理出该数组,然后用 st[i][j] 表示区间 [i,i+2j)[i,i+2^j)[i,i+2j) 的最大值,则存在递推关系: st[i][j]=max(st[i][j−1],st[i+2j−1][j−1]) st[i][j]=\max(st[i][j-1],s...原创 2020-04-05 18:07:46 · 125 阅读 · 0 评论 -
洛谷 P4779 【模板】单源最短路径(标准版)
求单源最短路径。 可以记住的模板有:堆优化的 Dijkstra,Bellman-Ford,SPFA。 堆优化的 Dijkstra:算法复杂度为 O(∣E∣⋅Tdk+∣V∣⋅Tem)O(|E|\cdot T_{\text{dk}}+|V|\cdot T_{\text{em}})O(∣E∣⋅Tdk+∣V∣⋅Tem),其中 ∣E∣|E|∣E∣ 是边集大小,∣V∣|V|∣V∣ 是点集大小,TdkT_{...原创 2020-04-05 11:25:36 · 282 阅读 · 0 评论 -
洛谷 P3366 【模板】最小生成树
给一个无向图,求最小生成树,不连通时输出 orz ,连通时输出最小生成树的各边长度之和。 两种算法:Prim 和 Kruskal。 Prim:算法流程类似 Dijkstra,区别在于 Prim 每次找的是已生成的最小生成树到剩下的点的最小边权,而 Dijkstra 每次找的是源点到剩下的点的最小边权。 Kruskal:以边为单位进行操作,每次从边集中取一个最小权值的边,并且该边的两个顶点处于不同的...原创 2020-04-05 08:37:26 · 140 阅读 · 0 评论 -
洛谷 P3368 【模板】树状数组 2
给一个数列,进行以下操作: 某区间每个数 +x+x+x 求某位置的值 区间修改,单点查询。用数组 b 来存放修改产生的差分。 代码如下: #include<iostream> #include<cstdio> #define MAXN 500010 using namespace std; typedef long long ll; int n,m,t,x,y; ll ...原创 2020-04-04 13:38:05 · 70 阅读 · 0 评论 -
洛谷 P3374 【模板】树状数组 1
给一个数列,进行两种操作: 某个数 +x+x+x 求区间和 和线段树1不同之处在于此题是单点修改,区间查询。 树状数组写起来比线段树简单一点,代码如下: #include<iostream> #include<cstdio> #define MAXN 500010 using namespace std; int n,m,a[MAXN],b[MAXN],t,x,y; i...原创 2020-04-04 13:24:35 · 93 阅读 · 0 评论 -
洛谷 P3373 【模板】线段树 2
给一个数列,进行三种操作: 某区间每个数 ×x\times x×x 某区间每个数 +x+x+x 求区间和 和线段树模板1相比,多了一个乘法操作。要先乘后加。还有注意步步取模… 代码如下: #include<iostream> #include<cstdio> #define lc(p) ((p)<<1) #define rc(p) (((p)<<...原创 2020-04-04 09:43:07 · 141 阅读 · 0 评论 -
洛谷 P3372 【模板】线段树 1
已知一个数列,进行以下操作: 某区间每个数 +k+k+k 求区间和原创 2020-04-03 09:33:13 · 79 阅读 · 0 评论