自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 KMP算法的两种理解

目录失配数组观点下的KMP算法基于Border理论的KMP算法Border理论下的KMPBorder定义对于一个长度为nnn的字符串SSS(下标从111开始),若1≤k<n1\leq k< n1≤k<n,且S[1..k]=S[n−k+1..n]S[1..k]=S[n-k+1..n]S[1..k]=S[n−k+1..n],则称S[1..k]S[1..k]S[1..k]...

2020-03-31 20:25:50 119

原创 莫比乌斯函数与莫比乌斯反演

莫比乌斯函数定义莫比乌斯函数μ(n)\mu(n)μ(n),当n=1n=1n=1时,μ(n)=1\mu(n)=1μ(n)=1;当n&amp;gt;1n&amp;gt;1n&gt;1时,设nnn的唯一分解式为n=p1c1⋯pkckn=p_1^{c_1}\cdots p_k^{c_k}n=p1c1​​⋯pkck​​,则μ(n)\mu(n)μ(n)定义为μ(n)={(−1)k,c1=c2=⋯=ck=...

2019-04-06 17:05:22 167

原创 上下界网络流的建模

【目录】无源汇可行流有源汇可行流有源汇最大流有源汇最小流有源汇费用流无源汇可行流问题描述不同于一般的网络,网络G=(V,E)G=(V,E)G=(V,E)不仅无源无汇,而且每条弧不仅有容量上界upperupperupper,还有容量下界lowerlowerlower。因为无源无汇,所以每个点都应该满足"流量守恒",即对于∀x∈G\forall x \in G∀x∈G,有∑(...

2019-04-06 17:02:24 134

原创 积性函数与筛法

莫比乌斯函数定义莫比乌斯函数μ(n)\mu(n)μ(n),当n=1n=1n=1时,μ(n)=1\mu(n)=1μ(n)=1;当n&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;1n&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;1n&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;1时,设nnn的唯一分解式为n=p1c1⋯pkckn=p_1^{c_

2019-03-18 16:28:49 197

原创 [置顶]【算法教程合集】

又又实在是太懒啦!!!自己写学习笔记?不存在的。。。在这里总结一下OI的一些教程(已分类)。基础算法离线算法数据结构线性结构偏序维护Math数论组合计数置换群多项式从多项式乘法到快速傅里叶变换(FFT &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; NTT &amp;amp;amp;amp;amp;amp;amp;

2019-02-27 08:40:44 739

原创 FFT学习笔记

概述多项式乘法是一种很常见的运算。朴素算法的时间复杂度为O(n2)O(n^2)O(n2),Karatsuba 乘法的时间复杂度为O(nlog⁡23)O(n^{{\log_2}3})O(nlog2​3)但是常数爆炸。下面介绍的快速傅里叶变换(FFT)可以在O(nlog⁡n)O(n\log n)O(nlogn)的时间内计算两个多项式的乘法。注:以下多项式均为一元多项式前置技能复数记i2=−1...

2019-02-17 09:05:15 134

原创 数据结构——线段树——李超线段树

李超线段树现在考虑这样一个问题:动态维护一个平面直角坐标系,支持查询与直线x=kx=kx=k相交的线段交点中纵坐标的最大值。如图,查询结果为绿色直线与x=kx=kx=k交点的纵坐标。插入记录seg(o)seg(o)seg(o)表示当前...

2019-02-12 17:23:38 232

原创 【zzy】yyy送礼物

题目链接【分析】就是求Σi=1n&amp;amp;lt;n&amp;amp;gt;i\Sigma_{i=1}^n &amp;amp;lt;n&amp;amp;gt;_iΣi=1n​&amp;lt;n&amp;gt;i​与除法分块相同,但是数据范围更小,查询次数更多考虑递推求解设f(n)=Σi=1n&amp;amp;lt;n&amp;amp;gt;if(n)=\Sigma_{i=1}^{n}&amp;amp;lt;

2018-10-28 19:00:38 93

原创 [SDOI2009]HH的项链

题目链接【分析】如果N≤5×104N \leq 5 \times 10^4N≤5×104,这就是莫队的模板题了。。。但是N≤5×105N \leq 5 \times 10^5N≤5×105。。。仍然考虑离线处理将询问按左端点排序预处理出每一种颜色第一次出现的位置,以及每个位置的下一个同色位置用一个指针扫描每一个位置,表示当前的左端点每扫描一个位置,就在该位置的下一个同色位置加11...

2018-10-26 17:47:02 165

原创 [NOI2007]社交网络

题目链接【分析】就是Floyd的最短路计数用d(u,v)d(u,v)d(u,v)表示从uuu到vvv的最短路长度,w(u,v)w(u,v)w(u,v)表示最短路的数量分两种情况讨论若dis(i,j)&amp;gt;dis(i,k)+dis(k,j)dis(i,j)&amp;gt;dis(i,k)+dis(k,j)dis(i,j)&gt;dis(i,k)+dis(k,j),则令w(i,j...

2018-10-26 17:17:30 57

原创 [SDOI2010]大陆争霸

题目链接【分析】有限制的单源最短路径先考虑无限制时,如何求最短路Dijkstra的过程,就是每次扩展一个结点类似的,加上题目中的限制条件后,求最短路即可注意:被结界限制的结点的 disdisdis 一定大于无限制的结点的 disdisdis【代码】#include &lt;cstdio&gt;#include &lt;cstring&gt;#include &lt;algo...

2018-10-26 17:09:01 128

原创 [Code+#4]最短路

题目链接【分析】首先,要建出来图。。。然后,要跑出来最短路。。。但是边的数目太大,直接建图的复杂度是O(n2)O(n^2)O(n2)的。考虑到边的权值与异或有关,于是分析边权与异或的关系。看了题解,发现只对异或结果中有且仅有一个111的两个结点建边,得到的图与原图是等价的。然后就可以开心的跑Dijkstra啦【代码】#include &lt;cstdio&gt;#inclu...

2018-10-26 16:56:01 42

原创 玉蟾宫

题目链接【分析】这就是悬线法的板子。。。#include &lt;cstdio&gt;#include &lt;cstring&gt;#include &lt;cctype&gt;#include &lt;algorithm&gt;using namespace std;const int N = 1e3 + 10;int n, m;int U[N][N], L[N][N]...

2018-10-18 14:56:18 184

原创 [ZJOI2007]棋盘制作

题目链接【分析】悬线法的板子题,以左右相邻格子颜色不同为条件,套用悬线法的步骤即可。#include &amp;lt;cstdio&amp;gt;#include &amp;lt;algorithm&amp;gt;using namespace std;const int N = 2e3 + 10;int n, m;int a[N][N], f[N][N], ans1, ans2;int U[N][N], ...

2018-10-18 14:54:14 73

原创 DP——悬线法

悬线法用途求解满足条件的最大子矩阵。定义悬线:由一个点向下扩展所得到的合法线段。L(i,j)L(i,j)L(i,j):从(i,j)(i,j)(i,j)向左扩展,最左端的合法位置。R(i,j)R(i,j)R(i,j):从(i,j)(i,j)(i,j)向右扩展,最右端的合法位置。U(i,j)U(i,j)U(i,j):从(i,j)(i,j)(i,j)向上扩展,最上端的合法位置,即以(i,j...

2018-10-18 14:48:06 289

原创 [Code+#4]最短路

题目链接题目中的边权与异或有关。对于这种边权具有异或性质的最短路,有一个特殊的性质。仅保留异或结果中存在且只存在一个111的边,求出来的最短路与原图等价。然后就。。。#include &amp;lt;cstdio&amp;gt;#include &amp;lt;cstring&amp;gt;#include &amp;lt;algorithm&amp;gt;#include &amp;lt;queue&amp;gt;#de

2018-10-18 14:46:43 117

原创 关押罪犯

题目链接看到最大值最小,考虑二分。现在问题转化为判断是否能将图分成两部分,使得边权大于等于xxx的边不会出现在每个部分内部。直接二分图染色就可以了。。。#include &lt;cstdio&gt;#include &lt;cstring&gt;#include &lt;algorithm&gt;using namespace std;const int N = 2e4 + 10;...

2018-10-15 23:39:26 77

原创 数论学习笔记

质数定义只存在111和它本身两个约数的数。质数分布较稀疏,对于一个正整数nnn,不超过nnn的质数大约有ln⁡(n)/n\ln(n)/nln(n)/n个。质数的判定1、试除法若一个正整数nnn为合数,则一定存在一个xxx,使x∣nx|nx∣n且x&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;=nx&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;=\sqrt{n}x&amp

2018-10-04 23:23:45 159

原创 图论——生成树

最小生成树PrimKruskalKruskal重构树最短路径树对于一张无负环图,选定一个源点,该源点到每个点的最短路径构成一棵树。Prufer数列Prufer数列是一种无根树的数列,由一棵nnn个结点的树转化的Prufer数列长度为n−2n-2n−2。无根树转Prufer数列对于一棵Prufer数列转无根树生成树计数矩阵树定理目前不会。。。完全图的生成树一张有nnn个...

2018-10-04 17:18:24 1194

原创 图论——连通性

欧拉回路Tarjan 算法Tarjan算法基于图的DFS遍历。时间戳在DFS时,按照每个点第一次被访问的顺序,标记每个结点。该标记称为时间戳,记作dfn(u)dfn(u)dfn(u)。搜索树在DFS时,每个结点只会被遍历一次。若图连通,则所有连接一个未访问结点的边会构成一棵树,不连通则构成一个森林。追溯值强联通分量割点 &amp;amp;amp;amp;amp;amp;amp; 桥点双联通分量 &amp;amp;amp;amp;amp;amp;amp; 边双联通分量.

2018-10-02 21:02:49 914

原创 图论——最短路

图论中的常见问题,有三种常用算法,以及许多拓展内容。松弛操作对于每条有向边(u,v,w)(u,v,w)(u,v,w),令dis(v)=min(dis(v),dis(u)+w)dis(v) = min(dis(v), dis(u) + w)dis(v)=min(dis(v),dis(u)+w)。这是最短路算法的核心操作。Dijkstra适用于非负权图求解单源最短路径。流程1、初始化dis...

2018-10-02 21:01:56 201

原创 阶梯NIM博弈

【定义】 有n堆石子,每次可以从第i堆的石子中拿走一部分放到第i-1堆中,或者把第1堆中的石子拿走一部分,无法操作者算输。【结论】 阶梯nim的游戏结果与只看奇数堆的石子数的普通nim结果相同。【证明】 只需要考虑奇数的位置进行Nim游戏,因为石子在偶数位置是可以模仿操作的。 这是因为任何人移动了偶数层的石子后,另外一个人总是可以把他们再移到下一奇数层,那么奇数层拿到偶数层的石子就相...

2018-07-22 22:30:38 642 1

原创 威佐夫博弈

【定义】 有两堆石子,两人轮流取石子,每次每个人可以从任意一堆石子中取任意多的石子或者从两堆石子中取同样多的石子,不能行动者判负。【结论】 设两堆石子个数分别为x,y(x&lt;=y)x,y(x&lt;=y)x, y (x z=y−xz=y−xz = y - x 则 当且仅当z∗5√2=xz∗52=xz * \frac{\sqrt{5}}{2} = x 时,后手必胜。【证明】 首先...

2018-07-22 22:17:26 84

原创 P1447 [NOI2010]能量采集

【题目链接】 洛谷 P1477【解析】 打表(其实是我不会证明)可以看出,每个点 (x, y) 对答案的贡献为 2 * gcd(x,y)gcd(x,y)gcd(x, y) ,于是便只需求 Σgcd(x,y)Σgcd(x,y)\Sigma {gcd(x, y)} 。 最大公约数求和的问题,有一种常用的高效解法。 设 f(x)f(x)f(x) 为 gcd(a,b)==xgcd(a,b)==...

2018-07-21 23:56:23 100

原创 P3601 签到题

【题目链接】 洛谷 P3601【解析】 这种 l,r 很大,但 r - l 很小的题目,解法基本上是固定的。 先筛除 r√r\sqrt{r} 以内的所有素数,计算其对区间内每个数的贡献,最后要注意大于 r√r\sqrt{r} 的质因数。【代码】#include&lt;bits/stdc++.h&gt;using namespace std;typedef long lon...

2018-07-21 23:38:24 100

原创 [SDOI2008]沙拉公主的困惑

【题目链接】 洛谷 P2155【解析】 首先筛法求出 1e7 以内的素数。 小于等于 m! 且与 m! 互质的数的个数就是 φ(m!)。 而对于任意与 m! 互质的 x,k * m! + x 与 m! 仍然互质,所以小于等于 n! 且与 m! 互质的数的个数为 φ(m!) * n! / m! 。 阶乘和逆元可以预处理,接下来考虑 φ(m!) 。 令 f(x) = φ(x!),利用 ...

2018-07-21 23:27:17 216

原创 [PA2014]Kuglarz

【题目链接】 BZOJ 3714: [PA2014]Kuglarz【解析】 乍一看,没啥思路。。。 经过苦(kan)思(le)冥(ti)想(jie)之后,发现是最小生成树。。。 用 d[i, j] 表示区间 [i, j] 的奇偶性,可以发现,当知道 d[1, i] 和 d[1, i - 1] 时,便可推导出第 i 个杯子下是否藏着球。 因为保证猜出哪个杯子下藏着球的条件就是 d[1,...

2018-07-16 23:45:14 190 1

原创 [SDOI2009]HH的项链

【题目链接】 洛谷 P1972 [SDOI2009]HH的项链 BZOJ 1878: [SDOI2009]HH的项链【解析】 莫队。。。 然而 BIT 也可以。 仍然是离线,将查询排序。 记录下每种颜色的最靠前的位置以及每个位置后同种颜色出现的下一个位置。 用一个指针扫描每个位置,更新其下一位置的贡献。 总复杂度 O(N log N)【代码】#include&lt;...

2018-07-14 23:36:21 57

原创 【模板】严格次小生成树

【题目链接】 洛谷 P4180 【模板】严格次小生成树[BJWC2010]【解析】 从 Kruskal 算法的贪心思想可以很自然的联想到严格次小生成树与最小生成树仅有一条边的差距。于是我们可以先求出最小生成树,再枚举非树边,而这一条边与树中的边一定会构成一个环。利用倍增或树剖求出这个环上边权最大的树边,但因为要求的事严格次小生成树,所以还要维护一个次小值。【代码】// luogu-...

2018-07-14 23:24:36 588

原创 [AHOI2005]航线规划

【题目链接】 洛谷 P2542 [AHOI2005]航线规划 BZOJ 1969: [Ahoi2005]LANE 航线规划【解析】 图上的删边、删点操作一般都是通过离线转化为倒序加边、加点操作,这一题也不例外。而图论中关于联通的问题基本上都是 Tarjan 算法或者生成树。 在原图中生成一棵树,该树上所有的边一定都是关键路径。将删边转换为加边后,每次加边可以看做是将树上的一段路径全部赋...

2018-07-14 23:05:56 697

原创 [NOI2016]区间

洛谷 P1712 [NOI2016]区间 BZOJ 4653: [Noi2016]区间【解析】 数据这么大,肯定要先离散化啦。 可以将区间按照 len 从小到大排序,反正这样不会影响答案。 利用尺取法的思想,用两个指针扫描一遍。 当不存在一个点的被覆盖次数 &gt;= m 时,R++; 当存在一个点的被覆盖次数 &gt;= m 时,L++。 此时的答案便是 len(R) - le...

2018-07-13 22:16:47 194

原创 [HEOI2016/TJOI2016]排序

【题目链接】 洛谷 P2824 [HEOI2016/TJOI2016]排序 BZOJ 4552: [Tjoi2016&amp;Heoi2016]排序【解析】 因为本题只有一次查询,所以可以二分这个数。 每次将大于等于 mid 的数赋值为 1,小于 mid 的数赋值为 0。最终的结果便是第一个满足排序后查询的位置上是 1 的数。 于是只要对 01序列 排序。 可以用线段树维护这个操作...

2018-07-13 21:51:40 179

原创 数列分块入门 6 (元素动态插入)

【题目链接】 LOJ #6282. 数列分块入门 6【解析】 Splay 。。。 这是分块的题。。。 还是老老实实用分块吧,在每个块内开一个 vector 或 list。 但是当数据不随机时,可能会出现一个块内有很多很多很多很多个元素的情况,这时候需要将每个块重构,或者在 sqrt(n) 次操作后重构,以保证时间复杂度。【代码】#include&lt;bits/stdc++....

2018-07-12 23:19:26 341

原创 数列分块入门 3 (区间前驱)

【题目链接】 LOJ #6279. 数列分块入门 3【解析】 考虑到前驱满足区间可加性,于是在每个块内套一个 set,边角的暴力,枚举即可。注意加法标记和边角修改后 set 也要随之修改。【代码】#include&amp;lt;bits/stdc++.h&amp;gt;using namespace std;const int maxn = 1e6 + 10;int n, len, ...

2018-07-12 22:54:13 318

原创 数列分块入门 2 (区间排名)

【题目链接】 LOJ #6278. 数列分块入门 2【解析】 查询一个数在区间内的排名,可以用树套树、分块解决。分块虽然效率较低,但实现简单、且常数较小。而且可以支持区间修改。 对于每个块,将其在内部排序。查询时块内二分、边角暴力;修改时块内打标记、边角暴力修改后将其所在块重新排序。【代码】#include&amp;lt;iostream&amp;gt;#include&amp;lt;vector...

2018-07-12 22:49:09 509

原创 [POI2011]ROT-Tree Rotations

【题目链接】 洛谷 P3521 BZOJ 2212【解析】 贪心,使一个非叶子结点的两棵子树前序遍历逆序对最少,得出的便是最优解。 证明: 因为交换一个非叶子结点的两棵子树,对该子树内叶子结点与子树外结点组成的逆序对个数无影响,所以局部最优解就是最优解。 将二叉树上的每个结点的子树情况用一棵权值线段树表示,每次合并即可。【代码】#include&lt;cstdio&gt;...

2018-07-08 23:12:49 251

原创 [APIO2015]八邻旁之桥

【题目链接】 洛谷 P3644【解析】 K == 1: 首先,位于同侧的直接处理,剩下的便是跨区的情况。 而跨区的情况过河的花费为定值。 设两边的位置分别为 a[i],b[i],桥的位置为 pos。 则 ans = Σ abs(a[i] - pos) + Σ abs(b[i] - pos)。 此时 ans 的值只与其数值有关,所以可将 a,b,合并为 c。 即 ans = Σ...

2018-07-08 23:02:53 116

原创 [CQOI2014]排序机械臂

【题目链接】 洛谷 P3165 BZOJ 3506【解析】 如果用 Splay 做,需要先排序,记录每个点被选中的顺序。 考虑到 FHQ Treap 的 Heap 性质,直接将结点的 key 值设为每个物品的高度。充分利用小根堆的性质,使每次被选中的结点一定是根结点。 当数据单调时,操作总复杂度为 O(n)。 但当数据单调递增时,暴力建树的时间复杂度就会退化为 O(n ^ 2)。 ...

2018-07-05 23:48:15 218 1

原创 [NOI2005]维护数列

【题目链接】 洛谷 P2042 BZOJ 1500【解析】 平衡树神仙题,debug 5h+。 思路到很简单,直接打标记维护。 FHQ Treap 要加上 O(n)建树才能 AC。【代码】#include&lt;bits/stdc++.h&gt;#define ll long longusing namespace std;const int inf = 1 &...

2018-07-05 23:37:10 127

原创 FHQ Treap 总结

【前言(一堆废话)】 目前 OI 竞赛中两大主流平衡树之一就是 FHQ Treap(另一个是 Splay)。 普通 BST 的中序遍历中,val 值构成一个单调递增的序列。 Treap 在 BST 的基础上,维护了一个 key 值,使其 val 满足 BST 性质,key 满足 Heap 性质。在维护 Heap 性质的同时,使 Treap 的树高期望是 log(n)。通常情况下,key 值是...

2018-07-05 23:28:54 4419

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除