算法笔记
算法学习过程的一些小收获hh
幸好我会魔法
这个作者很懒,什么都没留下…
展开
-
乘法逆元(费小定理)
左右一定不等,因为左边不是p的倍数,矛盾。的最终结果一定是等于序列。互质,且满足同余方程。由乘法逆元的定义可知。原创 2023-07-18 19:32:58 · 49 阅读 · 1 评论 -
ST表,二进制优化区间查询
分别是区间[i,i+2^(j-1)-1]和区间[i+2^(j-1),i+2^(j-1)+2^(j-1)-1]也基于用二进制优化,用于求解RMQ问题,也就是区间最值询问进行O(1)的解决。可以假设l+2^k-1=r,求解k可以得到k=log2(r-l+1);max(f[l][k],f[r-(1<<k)+1][k])即可。对于log2,我们可以进行预处理,也可以直接调用函数。fij 表示从区间[i,i+2^j-1]的最大值。预处理转移方程f[i]=f[i/2]+1。原创 2023-04-20 07:54:08 · 58 阅读 · 0 评论 -
匈牙利算法
在进行匈牙利算法模拟的时候,我们可以选择任意一组进行枚举,对于组内的每一个点,我们用dfs搜索他在另一组中的匹配点,一旦找到就返回匹配成功,对于这组数据,首先是1和5匹配,但在2寻找匹配时发现,5已经匹配过了(通过另开一个match数组来保存组二中各个点的匹配点),这样就可以模拟去find(match[x]),来寻找下一个点,于是会从1中去找下一个未匹配的点(match[x]=0),如果找到就将原先match[x]的匹配点给到另一个点,当前2所匹配到的5就可以进行匹配,然后进行下一个点的匹配。原创 2023-04-19 17:15:32 · 70 阅读 · 0 评论 -
倍增LCA
(对于j的枚举似乎是可以使用预处理log2进行优化,但是由于这个j枚举的是指数级别的,也就是从20左右向下枚举,所以一般作用应该不大)首先是自动至同一级,也就是将x向他的祖先上自动,根据d[i]数组,当d[f[x][j]]>=d[y]时就进行转移。否则,对x,y进行同时的转移,直到f[x][j]=f[y][j](x,y的j级祖先是相同的)也就是说i的第2^j级祖先等于从i的2^(j-1)级祖先的2^(j-1)级祖先。预处理f[i,j]=f[f[i][j-1]][j-1]从小到大会变成1+2+4+?原创 2023-04-19 08:54:37 · 86 阅读 · 0 评论 -
维护单调队列(滑动窗口
【代码】维护单调队列(滑动窗口。原创 2023-02-25 08:46:16 · 44 阅读 · 0 评论 -
一维二维差分
【代码】一维二维差分。原创 2023-02-23 17:34:14 · 28 阅读 · 0 评论 -
单源最短路——spfa
【代码】单源最短路——spfa。原创 2023-02-22 14:28:42 · 47 阅读 · 0 评论 -
单源最短路——堆优化dijkstra
【代码】单源最短路——堆优化dijkstra。原创 2023-02-22 13:04:43 · 46 阅读 · 0 评论 -
单源最短路——朴素dijkstra
【代码】单源最短路——朴素dijkstra。原创 2023-02-22 12:28:37 · 33 阅读 · 0 评论 -
简单博弈论
【代码】简单博弈论。原创 2023-02-22 10:22:18 · 42 阅读 · 0 评论