
笔记
文章平均质量分 80
operator__
operator_ / 666的某人不是我
展开
-
也许是全网最清晰易懂的KMP讲稿?——operator_
我们发现,在暴力匹配时,有很多比较是多余的,比如说,当我们进行了第一次匹配后,第二次匹配其实完全是多余的,因为第二次匹配成功的。其次,跳过去中间不会漏下任何情况,看我们最开始的例子,第二次匹配为什么是不必要的?再比如,当我们进行了第一次匹配后,第四次匹配的前两次比较其实也是多余的,因为我们通过第一次匹配我们得知了。你可能有疑问,我们在跳失配指针时看起来是有一个内循环的,复杂度正确吗?也是顺序的,指的是包含最后一个元素的连续一段,不同,如果这两个串相同,就违反了我们。),好像就可以完成上面的两个优化了。原创 2023-08-24 14:12:37 · 129 阅读 · 0 评论 -
整数分块——operator_
这是一种很简单但好用且优雅的n\sqrt nn分块。考虑求∑i1n⌊ni⌋∑i1n⌊in⌋,很容易发现⌊ni⌋⌊in⌋的值的种类不多,考虑按值域来求解。事实上,⌊ni⌋⌊in⌋的值最多只有2n2\sqrt n2n种(并不严谨,但反正是n\sqrt nn级别的),证明如下:对于ini>\sqrt nin⌊ni⌋≤nin⌊in⌋≤inn。原创 2023-08-23 15:20:28 · 168 阅读 · 0 评论 -
上下界网络流——operator_
建完模,考虑寻找可行流,由建模的原理,只要源点与汇点所有有关的边全部满流(易证源点满流时汇点也满流),就可以保证原网络流量平衡,即寻得一条可行流,那么只要跑一遍最大流即可。,那么新源点与新汇点的所有边已经满了,同时也已经让新网络的残量网络流量平衡(感性理解,可以视作都减去一个不同的差值使其平衡),所以我们以原网络的源点与汇点跑一遍最大流。的流量大于流出的,就从虚拟源点连一条流量为差值的边,反之就连向汇点。好,现在的问题就转化为了怎么保证差值网络流量平衡,可以发现,在一个正常的网络流中,唯一流量不平衡的是。原创 2023-08-11 15:19:43 · 208 阅读 · 0 评论 -
treap——operator_
小,那么为了维护堆性质我们要把右儿子变成根节点,但这样会破坏二叉搜索树性质,所以我们要把。性质嘛,就是二叉搜索树的所有性质它都满足,它只不过是让二叉树的形态平衡一点而已。在二叉搜索树插入与删除的过程中,经常会改变树的形态,我们就需要一种操作来维护。以左旋为例,我们在某一操作结束后发现根节点的右儿子。是一种思路简单,码量较小的(弱)平衡树。,具体代码与二叉搜索树差不多,可以去。取随机数,那么它的形态近乎平衡。中,这种操作就是左旋和右旋。的性质 ,易知这是一棵。的右儿子上,如下图。原创 2023-08-07 15:36:09 · 162 阅读 · 0 评论 -
复数——operator_
咳咳,数学课上学的复数,先写着,之后再补FFTFFTFFT之类的\dots我们用CC表示复数集,任意复数可以表示为abia+biabi的形式,其中a∈Ra∈R为实部,b∈Rb∈R为虚部,iii为虚数单位,满足i2−1i^2=-1i2−1。对于zabiz=a+bizabi,其共轭复数为z‾a−biza−bi。满足xn−10x^n-1=0xn−10的根都被称为单位根。原创 2023-07-26 13:46:52 · 109 阅读 · 0 评论 -
7.17 模拟赛T1(math)笔记
xy+1|x2+y2。模拟赛的一道T1T1T1,被完虐,记录一下。这思路有点离谱,虽然没用到过任何高级算法、数论知识,但是真的难。其实规律能接受,但证明过程真的复杂。这题据说可以打表找规律,但我没找到,我太蒻了。原创 2023-07-17 19:52:50 · 70 阅读 · 0 评论 -
并查集——operator_
理解一下题意,发现一个人的所有敌人都是朋友,所以想到给他们也开一个并查集,进而想到先给每个人都分配一个不存在的敌人,设其为。它的思路很简单:把每一组都看作以某点为首的一棵树,记录每个点的父亲节点,那么就可以不断向上找到根节点,也就代表了这个点的组别。顾名思义,就是每个并查集再维护个什么东西,比较常见的有维护到根的距离,合并时注意点顺序就好了。参考平衡树,尽量让集合的深度低一点,所以可以把浅的数放到深的树下,按子树大小同理。虽然也很好用,但要多开几个数组,代码要改的地方比较多,平常用路径压缩就足够了。原创 2023-06-24 16:31:05 · 81 阅读 · 0 评论 -
倍增思想——operator_
顾名思义,就是每次翻倍增加,属于一种很实用的思想。原创 2023-06-24 13:31:55 · 249 阅读 · 0 评论 -
堆——operator_
懒得画图,想象一下一个沙漏状的结构,上部是大根堆,下部是小根堆,它们有一个共同的堆顶(实际在写代码时只存在于某一个堆中,或者开一个变量存储),这个堆顶就是我们要求的中位数。删掉之后堆顶就空了,所以要让一个元素来顶替它(具体值是多少没关系,一遍调整就好了),那么为了保持完全二叉树的性质,我们肯定要让最后一个元素顶上去。堆顶一定是最小的,所以可以直接输出,然后把它删除。上面讲到,我们是可以把堆看作数组的,那么对于一个数组,我们也可以把它看作堆。当然,现在的“堆”并不满足堆的性质,所以我们要调整,调整是。原创 2023-06-16 16:04:38 · 77 阅读 · 0 评论 -
斜率优化——operator_
形如dpiMinMaxai∗bjcidjdpiMinMaxai∗bjcidj]),又满足一些条件的方程都可以考虑斜优,先推式子,转化为计算几何,之后可以考虑单调性、二分、三分等方法快速求解。原创 2023-05-21 12:07:23 · 64 阅读 · 0 评论 -
线段树——operator_
线段树是一种支持各种区间操作、区间询问的数据结构,复杂度同树状数组,时空常数略大,但应用范围极广。树状数组基于二进制,线段树则是基于分治。我们怎么分治?1.1.1.分成左右两部分递归2.2.2.考虑合并3.3.3.考虑边界情况那线段树的写法已经呼之欲出了。原创 2023-05-21 12:02:16 · 57 阅读 · 0 评论 -
字典树——operator_
想象一下字典,你查字典肯定不是从头翻到尾的吧,字典树就借鉴了这个思想。每个节点下连接了几个儿子,而节点本身代表一个字符(根除外),那么从一个节点到根节点的路径,就是代表的一个字符串。它有一些显然的性质,比如同前缀的字符串会处在一个子树内,可以利用这些性质干一些事(比如本题就可以dfsdfsdfs求子树和,做到O1O(1)O1询问)。它可以做到O∣s∣O(|s|)O∣s∣的插入与查找。原创 2023-05-16 20:57:40 · 61 阅读 · 0 评论 -
Huffman树——operator_
发现很多简单,但比较偏的算法我都不懂,所以现在开始按随机跳的题来浅浅了解一下这些东西。也可以说是一个数据结构。它可以用一句话来描述:带权路径长度最短的二(多)叉树。一棵树的带权路径长度是每个节点的权值*这个点到根的距离之和。原创 2023-05-12 19:09:05 · 68 阅读 · 0 评论 -
微积分基础——operator_
可以简单理解成函数在ab[a,b]ab区间中与xxx轴围成的面积大小(有正负)。原创 2023-05-03 18:36:14 · 571 阅读 · 0 评论 -
hash——operator_
核心:设计一个算法,使得要哈希的东西在一定程度上一一对应为一个数值,一般是通过取模实现,从而做到O1O(1)O1比较,或者是支持减法,从而做到O1O(1)O1求任意一个东西的哈希值。一般是用于快速比较。哈希的取模,可以使用自然溢出(即超过范围自动取模),或者手动取模。你要知道,因为哈希是基于取模的,所以对着代码还是可以卡的。自然溢出比较方便,而且速度比一般取模略快,但可能被卡,手动取模相对较烦,但不易被卡(因为模数是自定的),不过你也可以自定义一种数据类型来自动取模。原创 2023-04-25 19:17:02 · 245 阅读 · 0 评论 -
树状数组——operator_
这个东西比较特殊,用图感觉反而会乱(主要是根节点不是111),我就尽量用纯数学的讲吧。定义tiaiai−1⋯ai−lowbiti1tiaiai−1⋯ai−lowbiti1,反正就是前lowbitilowbit(i)lowbiti个数的和。其中lowbitilowbit(i)lowbiti指的是iii在二进制表示下最低位的111所代表的数量级,比如101010。原创 2023-04-22 19:29:47 · 67 阅读 · 0 评论 -
最大流——operator_
寻找增广路,求该增广路中的残量最小值,增广路中的每条边都要减去这个最小值,最后答案再加上这个值。不断重复,直到没有增广路了。:从源点出发,通过一些有向边容量的约束,最终能到达汇点的最大流量被称作最大流。寻找增广路,求该增广路中的残量最小值,增广路中的每条边都要减去这个最小值,而。求增广路,但考虑的不是每一条增广路的贡献,而是每个点的贡献。:从源点到汇点的一条路径,这条路径的所有边权都大于0。,最后答案再加上这个值。:网络中的一个特殊的点,只出不进,被称作源点。:网络中的一个特殊的点,只进不出,被称作汇点。原创 2023-04-09 16:58:26 · 507 阅读 · 0 评论 -
计算几何基础——operator_
东西好多啊⋯还好都不算难。原创 2023-04-02 11:09:48 · 71 阅读 · 0 评论 -
数论基础——operator_
有$a%b=a- \lfloor{{a}\over{b}}\rfloor*b $可以推广得到任意方程的通解。对应的,乘法逆元的定义:若。同时逆元也可能不止一个。有整数解的的充要条件是。再来一次裴蜀定理,就有。最后考虑一下边界即可。所以可得到原方程通解。原创 2023-04-02 09:47:45 · 782 阅读 · 0 评论 -
最小生成树——operator_
222种算法都是贪心的,可以根据是稀疏图还是稠密图选择合适的算法,在我做的题中好像kruskalkruskalkruskal应用广泛一点。原创 2023-03-27 20:08:52 · 61 阅读 · 0 评论 -
最短路——operator_
多源最短路无脑floydfloydfloyd,随机数据、有负权边或者需要多次最短路可以考虑SPFASPFASPFA,另外情况用dijkstradijkstradijkstra比赛时SPFASPFASPFA请酌情使用。原创 2023-03-27 18:51:37 · 57 阅读 · 0 评论 -
高斯消元法——operator_
呃,二元一次方程组解过吧,学校教的是加减消元法和代入消元法,代入消元法是要对原方程移项的,有点麻烦,而加减消元法虽然有很多巧妙的解法,但电脑不知道,所以用最一般的方法:加减消元法正推,代入消元法逆向回带。之所以要回带,是因为高斯消元后的方程组呈三角形,而利用高斯-约旦消元法,我们可以直接得到。高斯消元法的精度误差很大,所以尝试降低误差。你可以尝试一下,会发现除法的误差最大,同时除数越大误差越小。个版本还有一个优化版本,这就是高斯-约旦消元法,它有两个优化。处不再是找到一个就停止,而是找系数最大的方程。原创 2023-03-26 14:05:42 · 194 阅读 · 1 评论 -
2-sat——operator_
2−sat2-sat2−sat问题指的就是有若干个集合,每个集合内部有222个点,这两个点只能且必须取一个(其实就是一个boolboolbool变量的222种取值),在集合外,还有若干个关系,形如::: x1x_1x1 与 y2y_2y2 中至少取一个,求是否有满足所有关系的可行解(可能还会要求构造)。形式化一点,就是求构造boolboolbool数列{x}\{x\}{x}使得(x1∨x2)∧(x1∨¬x4)∧(¬x3∨x4)∧(x2∨x5)∧⋯==true(x_1 \vee x_2)\land(x_原创 2023-03-26 13:28:36 · 66 阅读 · 0 评论 -
类欧几里得——operator_
类欧几里得算法证明原创 2023-03-26 12:34:58 · 51 阅读 · 0 评论