- 博客(24)
- 收藏
- 关注
原创 博弈论(Nim 游戏)
Mex运算设SSS表示一个非负整数集合。定义mexSmexS为求出不属于集合SSSmexSminxmexSminxxxx属于自然数,且xxx不属于SSS。有向图游戏给定一个有向无环图,图中有一个唯一的起点,在起点上放有一枚棋子。两名玩家交替地把这枚棋子沿有向边进行移动,每次可以移动一步,无法移动者判负。该游戏被称为有向图游戏。任何一个公平组合游戏都可以转化为有向图游戏。
2024-06-23 21:53:13
1825
原创 AcWing 255. 第K小数
时间上要比y的慢一倍。大体思想就是,我们从小到大依次加入一个数,每加入一个就记录一个版本,线段树里记录区间里数的数量,在查询时,只要二分出区间数的数量大于等于k的最小版本即可,这个版本对应插入的点就是要求的第 k 小点,的和 y 是一个量级的,可能是由于常数问题,所以运行上要慢。自己想出来的,感觉要容易想到,使用。
2024-06-22 16:43:42
436
原创 相关建图技巧
出树点,如果从出树的某个点出发,可以通过绿边到达它的父区间(节点)能到达的点,而通过蓝边(新建边),可以进入树,到了入树,又可以通过绿边进入子区间(节点),最后通过红边到达对应出树的子节点。这时候还没完,大体思路是这样但是建图时还有一个问题,即我们线段树修改一次最多找一个区间,这时候也能看出来用聚点的好处,那么我们连边函数就要写两个,一个从出树到聚点,一个从聚点到入树。首先定义两颗线段树树,一颗出树一颗入树,在入树内父节点都连向子节点,在出树内子节点都连向父节点,然后两个数对应节点从入树到出树连一条边。
2024-06-07 11:06:14
644
原创 P2716 和谐的雪花
本题解解法为单调对列。当然,看题目,是可以使用 ST 表或者线段树之类的做。中心思想就是用单调队列维护固定区间内最大最小值,加上二分答案。的取值,剩下的就是用单调队列,正常单调一个矩阵是不能的,但是可以用两次单调队列,把一个矩阵的最值,压到矩阵的最右下角,然后求解即可。是一模一样的,评蓝有点高了。根据题意,很容易想象到二分。
2024-06-06 10:57:04
351
原创 中国剩余定理(新)
中国剩余定理(孙子定理),这是用来解出一堆线性同余方程组同一解的定理,通常会给出一对同余方程。,对于其他的等式同理, 这就说明,这是一个正确解。(这里有多组解的原因也是, 有。个未知数(把同余方程列乘等式),因此有无数解)你可以尝试带入进去。比如这里带入第一个式子。来得到一组解, 因此只需要证明可行性即可。由上面我们可以知道,中国剩余定理是通过。的乘积,那么通解应该也就知道了,即。这个因子,那么其他项就可以被取模。就一定可以通过 exgcd 求出。, 那么M1 * t1 在取模。给完美消掉,只剩下第一项。
2024-06-05 13:51:13
1083
原创 exgcd 通解(新)
什么是通解,我们知道二元一次方程,是如果只有一个式子,那么解会有无数个,而通解就是指让我们只找到一个解就可以推出其他所有解的式子。的公约数变大, 这就和我们d是最大公约数就矛盾了, 所以a’和b’互质)对于代码中,因为 C++ 强大的取负模的特性,所以更准确代码形式的应该是。也是整数,,依旧满足要求)不然就消不掉。,就会产生小数, 就不是整数了,因此。给删掉, 剩下的就是最小的正整数解。知道了定义下面就是推式子了,首先设。互质(如果他们不互质,附带最小正整数解就是。
2024-06-02 15:41:05
929
原创 欧拉函数(新)
于是就可以通过分解NNN的质因数求出来φN\varphi(N)φN,由此也可以看出,一个数的欧拉函数的大小和质数的次幂无关。试除法分解质因数是OnO(\sqrt n)On的, 所以求φN\varphi(N)φN也就是OnO(\sqrt n)On的具体见代码int n, m;cin >> T;cin >> n;i
2024-05-26 16:38:09
365
原创 欧拉函数(新)
欧拉函数φ的定义,φi表示从1i之间和i互质的数的数量 (a和b互质即gcdab1欧拉函数是积性函数,例如ab都为质数,那么φabφa×φb,递推式为φabφgcdab))φa×φb×gcdab(证明暂时搁置)设一个数N可得Np1b1×p2b2×p3b3××pkbkp为质数因为还因为1pb一共有pb个数,不和pb互质的数有。
2024-05-25 21:57:48
323
原创 Floyd
为数不多的全源最短路算法,全源即,全部点为原点,即算出任意两个点之间的最短路径。前提条件,没有负环。可有负权。因为中心思想是动态规划,所以有很强的性质,做题的时候注意利用。
2024-05-25 17:35:26
430
原创 01bfs
这是利用bfs进行最短路的思想,使用双堆队列即 deque 进行操作。简单说从起点开始加入的每一条边,0权放到 deque 最左边,1权放到最右边。这样进行 bfs 时,每次我们都用当前最短的边对其他边进行松弛,而这就是 dijkstra 的思想,从某种意义上说,01bfs 的 dijkstra 的一种特殊情况。众所周知,dijkstra 时间复杂度是O((nmlogm的,logm。
2024-05-25 17:32:40
355
原创 ST表(解决RMQ问题)
有点时间补一下这玩意吧。首先先说明 RMQ 是一类问题,指,而 ST 表是解决 RMQ 问题的一把(手术刀,锋利但不通用)。
2024-05-25 17:30:35
390
原创 Dijkstra(证明)
非常经典的单源最短路算法。仅能用于正权图(边权可为0)拥有朴素版On2和堆优化版O((nmlogm朴素版一般用邻接矩阵存图而优化版使用邻接表或者链式前向星,我常用链式前向星。
2024-05-11 21:56:16
1286
2
原创 线段树的笔记
线段树及其强大的东西,可以在O(4logn)时间内完成,区间修改(增删改减),区间查询的操作 ,即所有关于区间的操作,它都能以O(4logn)的时间完成。如果不下传那么当modify时会用子节点来更新父节点的值(pushup),如此,因为懒标记没下传,子节点的值不是真实值,因此更新的父节点的值就会错误,导致修改的错误。有时候很会遇到仅区间加的情况,这时候可以不用懒标记,通过套一个差分数组,就可以实现区间修改,当然查询的时间复杂度也会增加,但对于某些,如区间最值等,这东西非常好用了。
2024-04-30 11:10:55
535
原创 转移矩阵的设计
算出来最后乘上一个起始矩阵,时间复杂度是O(logn)的,利用这个就可以加速递推式的转移。而矩阵有结合律,所以我们可以先把要转移的矩阵次数,利用快速幂的原理,用logn的时间。最简单最典型的转移矩阵就是斐波那契数列的转移矩阵。数,并且C * B得到的也必须满足上面情况,即A每乘一次B,就可以得到含有。的矩阵,先说明,转移矩阵的设计没有定法,全靠经验。转移矩阵B的边长必须是A的列数,这里设为。设计,目的是使A * B的结果矩阵C含有。更简单的说,就是可以转移出下面情况。内的数,要保证用这些数可以递推出。
2024-04-28 19:37:33
422
原创 矩阵快速幂
众所周知,矩阵具有而具有,在有的时候,比如让你求斐波那契数列的第10^18项,递推方程是正常递推肯定是算不出来的,这时候就要用到矩阵去运算。我们可以设计一个[[转移矩阵的设计 | 转移矩阵]]通过它来快速算出目的项。前置知识是[[快速幂 & 龟速乘 & 快速乘 | 快速幂]]和[[矩阵]]核心思想和一样只不过这里是用矩阵乘法来实现,所以代码中的乘都变成的矩阵相乘的函数其限制条件就是, 矩阵快速幂的矩阵A里面是, 并且长宽如0 11 1这就是斐波那契数列的(快速幂加速计算的矩阵)
2024-04-28 19:36:58
146
原创 扩展欧几里得(逆元)
求逆元还有一种方法, 也是一种特殊的情况,所以这个式子可以用exgcd进行求解。什么是逆元, 逆元就是形如。这个式子我们可以把他展开。[[exgcd通解]]这就是逆元的特殊求法。[[欧几里得算法]]
2024-03-24 21:40:40
1154
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人