
算法/总结/游记
文章平均质量分 71
forezxl
水君一枚
展开
-
NOIP2018爆炸记
感觉一年啥都没学Day 0今年去学车考啊,从没去过学车的我感到瑟瑟发抖。而且大部分都是用笔记本考的,感觉很舒服。早上10点出发,车上一直在看昨天FQY安利给我的番(平生第一次看番好鸡冻),不知不觉就到杭州了。在宾馆里颓到4点去学校,把那部番看完了。领了狗牌后开始研究考场,woc什么鬼啊,七百多人全挤一个大厅里,那还不吵死!真羡慕那些被分到机房里的人(不过要是XP的话就好玩了)。一看时间差不...原创 2018-11-11 22:28:06 · 470 阅读 · 0 评论 -
后缀自动机简介(洛谷P3804)
后缀自动机简介学习自这里这里只是为了背板而写的简介定义 对给定字符串s的后缀自动机是一个最小化确定有限状态自动机,它能够接收字符串s的所有后缀。通俗点说,后缀自动机就是一种自动机废话 ,它能够识别字符串s的所有后缀(当然不只识别得到后缀),并且能实行快速跳转(比如AC自动机的失配指针)。然后就可以用它搞很多事情。用途自行百度吧。。。太多了。。。思想...原创 2018-03-07 15:12:18 · 541 阅读 · 0 评论 -
莫比乌斯函数与反演
莫比乌斯函数长什么样长这样:μ(d)μ(d)\mu(d)定义(1):当d=1d=1d=1时,μ(d)=1μ(d)=1\mu(d)=1(2):当ddd的所有质因子都是一次(即没有完全平方因子)时,μ(d)=(−1)kμ(d)=(−1)k\mu(d)=(-1)^k,kkk为因子个数(3):其他情况μ(d)=0μ(d)=0\mu(d)=0性质莫比乌斯函数有一下...原创 2018-02-27 08:56:16 · 799 阅读 · 0 评论 -
CDQ分治简介(洛谷P3810、BZOJ3262)
%%%陈丹琦巨佬算法用途当碰到一些动态的题目时,常常需要用到高级数据结构来维护,代码又臭又长。而在某些情况下,CDQ分治可以代替这些高级数据结构,转动态为静态来处理,使代码复杂度大大降低。算法实现基本步骤看到这个名称,就知道肯定是用分治的思想来解决了。普通的分治中,左半个区间是不影响右半个区间的,做完当前区间直接递归。而CDQ分治一般会经过以下三个步骤: 1....原创 2018-02-12 15:23:48 · 366 阅读 · 0 评论 -
狄利克雷卷积
基本上的部分内容来自百度百科定义设f(n)、g(n)是两个数论函数,它们的狄利克雷乘积也是一个数论函数,其定义为: h(n)=∑d|nf(d)g(nd)h(n)=∑d|nf(d)g(nd)h(n)=\sum_{d|n}f(d)g(\frac nd) 简记为h(n)=f(n)∗g(n)h(n)=f(n)∗g(n)h(n)=f(n)*g(n)性质狄利克雷卷积有以下几个性...原创 2018-02-25 20:00:43 · 864 阅读 · 0 评论 -
BSGS和EXBSGS
BSGS全称Baby Step Gaint Step(大步小步法)内容求解Ax≡B(mod C)(0≤x<C)Ax≡B(mod C)(0≤x<C)A^x\equiv B(mod\ C)\quad(0\le xCCC为素数)。0≤x<C0≤x<C0\le xCCC为素数时,根据欧拉定理得Aφ(C)≡1(mod C)Aφ(C)≡...原创 2018-02-26 14:08:50 · 501 阅读 · 0 评论 -
DLX 简介(hihocoder1317)
问题简介精确覆盖问题:给定一个01矩阵,从中选出若干行,使得每一列恰好有一个1。求一个方案。算法实现搜索每次选择一行,然后把这一行有1的列,在同一列中也有1的其它行,以及这一行本身从矩阵中除去。然后又变成了一个小的矩阵,一直递归至只剩一行。如果这一行全是1,则返回有解并输出选择的行编号,否则无解并恢复原来矩阵。如果搜索完毕后仍没有方案则无解。下面给出一张大矩阵变小矩阵的原创 2018-01-23 21:14:14 · 471 阅读 · 0 评论 -
2-SAT(POJ3683)
前置技能Tarjan定义K-SAT:给你许多个集合,每个集合都有k个元素。同时又有一些限制(如取x则不能取y),你必须在所有集合中取且仅能取一个元素,求合法方案。 2-SAT:当K取2时的情况。为什么只考虑K=2的情况呢? 因为当K>2时,已经被证明是一个NPC问题。算法实现几个前提建x->y的边表示选了x就必须选y。在同一集合的元素编号为x,x^1。 建原创 2018-01-16 20:01:29 · 265 阅读 · 0 评论 -
LCT(动态树)(洛谷P3690)(BZOJ3282)
推荐这篇论文前置技能Splay和树链剖分简介动态树问题, 简称LCT,近几年在OI中兴起的一种新型问题,是一类要求维护一个有根树森林,支持对树的分割, 合并等操作的问题。算法用途比如维护一个数据结构,有如下操作:1.查询路径权值和。 2.查询LCA。 3.修改单个点的权值。 4.断开两个点,使之成为两棵树。 5.合并两个点,使之成为一颗树。当然还...原创 2018-01-07 19:44:00 · 580 阅读 · 0 评论 -
Splay
简介伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。它由丹尼尔·斯立特(Daniel Sleator)和罗伯特·恩卓·塔扬(Robert Endre Tarjan)在1985年发明的。原理普通二叉排序树很容易因为变成一条链而导致时间复杂度大大增加,而Splay则通过伸展来不断地变换树的形态,这样即使出现了链也很快会被打原创 2017-12-10 11:17:24 · 610 阅读 · 0 评论 -
树套树之线段树套平衡树(BZOJ3196、洛谷3380)
我们要维护这样一个数列,它资瓷以下操作: 区间查询前驱、后继、数k的排名、排名为k的数,以及区间/单点修改。原创 2017-12-29 13:35:05 · 707 阅读 · 0 评论 -
中国剩余定理
孙子定理是中国古代求解一次同余式组的方法。是数论中一个重要定理。又称中国余数定理。原创 2017-10-27 20:17:45 · 1196 阅读 · 0 评论 -
dsu on tree(树上启发式合并)简介(codeforces 600 E)
主要解决像统计树上一个节点的子树中具有某种特征的节点数这种问题。原创 2017-12-17 13:50:48 · 944 阅读 · 0 评论 -
Treap简介
树堆,在数据结构中也称Treap,是指有一个随机附加域满足堆的性质的二叉搜索树,其结构相当于以随机数据插入的二叉搜索树。原创 2017-11-26 19:15:58 · 513 阅读 · 0 评论 -
无源汇上下界可行流
%%%liu_runda前置技能最大流定义上下界网络流流:每条边的流量除了上界还有下界。 无源汇上下界可行流:没有源汇的上下界网络流。因为只需要满足每个点流量守恒,所以一般求可行流。求解方法令每条边的流量等于流量下界,得到一个初始流,然后建出这个流的残量网络。因为初始流的流量不一定守恒,所以我们考虑建一个附加流,使得这个附加流加上初始流之后达到守恒。就像这样: 如果...原创 2018-02-28 14:49:04 · 583 阅读 · 0 评论 -
有源汇上下界网络流
%%%liu_runda前置技能无源汇上下界可行流定义有源点和汇点的上下界网络流。。。三个模型及解决方法有源汇上下界可行流模型有一个源点sss和一个汇点ttt,求一个流使得源点的总流出量等于汇点的总流入量。解决方法连一条ttt到sss的上下界为[0,+∞)[0,+∞)[0,+\infty)的边。问题转化为无源汇上下界可行流。然后把这条...原创 2018-02-28 18:29:13 · 262 阅读 · 0 评论 -
KD-Tree简介(BZOJ4520)
简介k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。应用两个最常见的应用:范围查询、K近邻查询。范围查询:给定查询点和查询距离的阈值,从数据集中找出所有与查询点距离小于阈值的数据。K近邻查询: 给定查询点及正整数K,从数据集中找到距离查询点最近的K个数据。特别的,当K=1时,就是...原创 2018-02-21 17:10:11 · 367 阅读 · 0 评论 -
NOIp2017 题解
Day1T1 小凯的疑惑题目传送门考场上打表搞了一个很奇怪的结论,化简后就是a∗b−a−ba*b-a-ba∗b−a−b。具体证明现在还是不大会。代码:#include&lt;cstdio&gt;#include&lt;cstring&gt;#include&lt;algorithm&gt;using namespace std;typedef long long LL;LL a...原创 2018-09-24 19:24:00 · 1804 阅读 · 0 评论 -
NTT简介
算法用途多项式乘法系数取模。前置知识原根,FFT。原根阶:若(a,p)=1(a,p)=1(a,p)=1,则满足ar≡1(modp)ar≡1(modp)a^r \equiv 1 (\mod p)的最小的rrr被称为aaa模ppp的阶。原根:如果r=φ(p)r=φ(p)r=\varphi(p),则称aaa为modpmodp\mod p意义下的原根。原根有一个判定方法:把...原创 2018-08-30 21:48:55 · 3387 阅读 · 0 评论 -
FWT简介(洛谷P4717)
用途Fast Walsh-Hadamard Transform,即FWT,用来解决形如ci=∑j⊕k=iajbkci=∑j⊕k=iajbkc_i=\sum_{j\oplus k=i}a_jb_k一类的卷积,其中⊕⊕\oplus表示位运算(xor/or/andxor/or/and\text{xor/or/and})。过程类比FFT,我们可以构造出一个变换使得aiaia_i和bjbjb...原创 2018-08-07 20:42:30 · 496 阅读 · 0 评论 -
FFT简介(洛谷P1919/3803/4245、BZOJ2179)
学习自FFT详解。很久前就想学,然而一直不能理解,这两天稍微懂了一些。含义及用途FFT(Fast Fourier Transformation)是离散傅氏变换(DFT)的快速算法。即为快速傅氏变换。它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的,把多项式乘法的复杂度从O(n2)O(n2)O(n^2)降到了O(nlogn)O(nlogn)O(n\log...原创 2018-07-08 20:32:31 · 615 阅读 · 0 评论 -
杜教筛简介
杜教筛简介%%%唐老师%%%YYB前置技能莫比乌斯反演用途&过程在低于线性的时间内求出一些积性函数的前缀和。假设我们现在要求一个积性函数的前缀和S(n)=∑ni=1f(i)S(n)=∑i=1nf(i)S(n)=\sum_{i=1}^{n}f(i)设一个积性函数g(i)g(i)g(i)则 ∑i=1n(g∗f)(i)=∑i=1n∑d|ig(d)f(...原创 2018-05-15 20:05:10 · 4658 阅读 · 0 评论 -
高斯消元(洛谷P3389)
简介数学上,高斯消元法,是线性代数规划中的一个算法,可用来为线性方程组求解。常用于加减消元法,求出矩阵的秩,以及求出可逆方阵的逆矩阵。实现其实高斯消元就是模拟手算方程组的过程。手算方程组最常用的两种方法:加减消元和代入消元。不断消元直到解出一个元,再不断回代解出其他元。高斯消元法则是通过不断加减消元解出一个元再回代回去。举个例子比如下面这个方程组: ⎧⎩⎨x+...原创 2018-05-13 11:00:18 · 326 阅读 · 0 评论 -
Catalan数简介
定义递推式: C(n+1)=∑i=1nC(i)∗C(n−i)C(n+1)=∑i=1nC(i)∗C(n−i)C(n+1)=\sum_{i=1}^{n}C(i)*C(n-i) 其中C(1)=C(0)=1C(1)=C(0)=1C(1)=C(0)=1通项公式: C(n)=Cn2nn+1C(n)=C2nnn+1C(n)=\frac {C^n_{2n}}{n+1} 等式右边的CCC表示...原创 2018-04-19 20:57:15 · 390 阅读 · 0 评论 -
半平面交简介(BZOJ2618)
定义半平面:平面上的直线及其一侧的部分,可以用Ax+By+c≥0Ax+By+c≥0Ax+By+c\geq 0表示。在一个有界区域里半平面或半平面的交是一个凸多边形区域。n个半平面的交是一个至多n条边的凸多边形。 其实半平面交就是线性规划方程组的解集。举个例子,定义有向直线的右边为半平面,那么半平面交就是下图的红色区域。求解可以发现半平面交是一个凸多边形(当然也有是一个...原创 2018-04-13 11:01:40 · 351 阅读 · 0 评论 -
Lucas定理简介(洛谷P3807)
内容设ppp为素数,则Cmn≡Cm/pn/p∗Cm mod pn mod p(modp)Cnm≡Cn/pm/p∗Cn mod pm mod p(modp)C_{n}^{m}\equiv C_{n/p}^{m/p}*C_{n\ mod\ p}^{m\ mod\ p}(\mod p)证明不会应用...原创 2018-04-22 16:36:50 · 264 阅读 · 0 评论 -
旋转卡壳简介(POJ2187)(洛谷P1452)
旋转卡壳简介(POJ2187)读音word上是这么读的: 前置技能凸包算法用途旋转卡壳可以在O(n)O(n)O(n)的时间内确定一对对踵点对,它的用途包括但不限于:计算距离(凸多边形直径)、计算外接矩形(最小面积/周长)、三角剖分(洋葱三角剖分)等其他奇奇怪怪的东西。算法实现(模板)以POJ2187(洛谷P1452)为例。这道题要我们求所有点之...原创 2018-04-15 10:06:52 · 420 阅读 · 0 评论 -
线性基(洛谷P3812)
东学学西学学定义设一个数集SSS通过异或可以组成的集合为VVV,那么SSS的线性基是SSS的一个子集A={p1,p2,…,pn}A={p1,p2,…,pn}A=\{p_1,p_2,\dots,p_n\},满足pxpxp_x的最高位1的位置为xxx,且A中的数通过异或组成的数集也为VVV。线性基的维护插入每当需要插入一个数xxx时,从高位到低位扫一遍。当扫到有一位为1时,如果...原创 2018-04-09 15:36:20 · 286 阅读 · 0 评论 -
凸包简介(HDU1392)
定义 在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点(X1,…Xn)的凸组合来构造. 在二维欧几里得空间中,凸包可想象为一条刚好包著所有点的橡皮圈。 用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有的点。————转自百度百科。给一张图应该就能懂了: ...原创 2018-04-07 22:06:07 · 427 阅读 · 0 评论 -
叉积和点积及其应用简介
点积定义在二维平面直角坐标系中,设a⃗ =(x1,y1),b⃗ =(x2,y2)a→=(x1,y1),b→=(x2,y2)\vec{a}=(x_1,y_1),\vec{b}=(x_2,y_2),则a⃗ ⋅b⃗ =|a⃗ ||b⃗ |cosθa→⋅b→=|a→||b→|cosθ\vec{a}\cdot\vec{b}=|\vec...原创 2018-04-07 21:16:15 · 1181 阅读 · 0 评论 -
主席树/可持久化线段树简介(洛谷P3834/P3919)
又称函数式线段树,顾名思义,也就是通过函数来实现的线段树,至于为什么叫主席树,那是因为是fotile主席创建出来的这个数据结构原创 2017-12-24 10:30:20 · 680 阅读 · 0 评论 -
NOIp2017游记
NOIp2017游记原创 2017-11-23 20:28:43 · 684 阅读 · 0 评论 -
强连通分量与缩点(Tarjan算法)(洛谷P3387)
强连通分量:有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected components)。原创 2017-10-05 20:23:01 · 850 阅读 · 0 评论 -
网络流最大流入门(洛谷P3376)
所谓网络或容量网络指的是一个连通的赋权有向图 D= (V、E、C) , 其中V 是该图的顶点集,E是有向边(即弧)集,C是弧上的容量。此外顶点集中包括一个起点和一个终点。原创 2017-09-28 09:40:08 · 983 阅读 · 0 评论 -
SG函数详解
给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负。原创 2017-10-17 19:01:40 · 1924 阅读 · 0 评论 -
AC自动机算法简介(洛谷P3808)
给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。如果直接跑n遍KMP的话时间复杂度会较高(O(nm)),这时AC自动机算法便应运而生。原创 2017-08-12 15:26:05 · 980 阅读 · 0 评论 -
阶梯博弈详解
即有n个阶梯呈升序排列,每个阶梯上有若干个石子,可行的操作是将一个阶梯上的石子移任意个(>0)到前一个台阶。当没有可行操作时(所有石子都被移动到了地面,即第0号台阶)输。原创 2017-10-17 19:46:07 · 1503 阅读 · 0 评论 -
后缀数组简介(洛谷P3809)
推荐这篇Blog(写的比我详细多了Orz)算法用途在许多场合可以替代后缀树,也可以和其他算法结合搞许多事情,是一个很强大的东东。各种东西求后缀数组的整个过程其实就是基数排序,所以建议先学会基数排序。① 后缀:即对于字符串sss,s[i]−s[n]s[i]−s[n]s[i]-s[n]即为s的一个后缀(i∈[1,n]i∈[1,n]i\in[1,n])。 ② rankr...原创 2017-10-07 21:23:19 · 521 阅读 · 0 评论 -
最长公共子序列LCS简介
一个数列 ,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则称为已知序列的最长公共子序列。原创 2017-09-06 21:37:49 · 292 阅读 · 0 评论 -
网络流费用流入门(洛谷P3381)
最小费用最大流问题是经济学和管理学中的一类典型问题。在一个网络中每段路径都有“容量”和“费用”两个限制的条件下,此类问题的研究试图寻找出:流量从A到B,如何选择路径、分配经过路径的流量,可以在流量最大的前提下,达到所用的费用最小的要求。原创 2017-09-28 10:46:17 · 647 阅读 · 0 评论