复习
文章平均质量分 68
升大学暑假复习DP、数据结构、图论等
「已注销」
前oi选手。
重庆市南开中学高2020级毕业生。
重庆大学计算机系2020级学生。
QQ1954486214欢迎添加讨论~
展开
-
数据结构学习之树状数组
文章目录一、单点修改区间查询lowbit单点修改区间查询二、区间修改单点查询差分数组差分数组的构建差分数组的应用区间修改单点查询三、二维树状数组一、单点修改区间查询lowbitint lowbit(int x) {return x&(-x)}作用:取出十进制数x二进制表示中由最低位往最高位方向的第一个1如10的二进制为(1010)2(1010)_2(1010)2取出由最低位往最高位方向的第一个1:(10)2(10)_2(10)2即为数字2这个时候我们如果将原数x减去这个原创 2021-03-08 19:18:54 · 132 阅读 · 0 评论 -
冒泡排序、快速排序多个排序算法的原理及比较
文章目录冒泡排序插入排序选择排序希尔排序计数排序基数排序桶排序堆排序归并排序快速排序此篇笔记用于记录各种排序算法的原理,不做具体的对比与更加深入的研究。注意:以下原理与举例均以按照从小到大排序说明。示例代码均以 洛谷1177 作为模板题,时间复杂度为 O(n2)O(n^2)O(n2) 的算法只能过第一个测试点,时间复杂度为 O(nlogn)O(n\log n)O(nlogn) 的算法可以通过所有测试点。冒泡排序每一轮两两之间相互比较,将更大者移至右方,则每一轮结束,当前最大的数一定被移到了最原创 2021-03-03 13:58:27 · 230 阅读 · 0 评论 -
数据结构学习之并查集
由于博主并不是初次学习这些算法数据结构,甚至很多都是学了两三年的东西。因此这些学习笔记更倾向于复习笔记,并不总会有非常细致的讲解,更多的是记录一般的实现思路和一些题目的分析思路。文章目录一、基本操作1.初始化2.路径压缩3.合并4.求集合数量二、例题1.模板题:洛谷15512.模板题:LeetCode 5473.LeetCode 684一、基本操作1.初始化void init() { for(int i = 1; i < N; i++) f[i] = i;}2.路径压缩in.原创 2021-02-22 17:54:57 · 148 阅读 · 0 评论 -
数据结构学习之栈队列链表
文章目录一、链表1.单向链表2.双向链表二、队列三、栈一、链表1.单向链表单项链表应至少满足这样的功能:1.O(1)O(1)O(1)添加元素在链表末尾添加元素,移动tailtailtail指针,建立新节点,赋值。2.O(n)O(n)O(n)插入元素从链表头开始枚举,直到枚举到需要插入元素的位置。改变指针指向,插入元素。3.O(n)O(n)O(n)删除元素从链表头开始枚举,直到枚举到需要删除元素的位置。改变指针指向,删除元素。4.枚举所有元素从链表头开始枚举,直到末尾。另外注意,单向链原创 2021-02-22 10:25:06 · 252 阅读 · 0 评论 -
简单复习一下树上差分的两种操作(边差分与点差分)
边差分即快速统计出每条边在我们执行的操作中出现的次数。sum[i]sum[i]sum[i]表示iii号点到它的父亲的那条边出现的次数。假设接下来我们对x−&amp;amp;gt;yx-&amp;amp;gt;yx−&amp;gt;y这条路径执行了某个操作,需要修改这条路径上的每条边出现的次数。我们只需要维护这条路径的两端与lcalcalca即可:sum[x]++,sum[y]++,sum[lca(x,y)]-=...原创 2018-10-05 16:34:36 · 862 阅读 · 0 评论 -
简单复习一下KMP算法(模式匹配)
KMP算法用来做什么KMP算法用于在线性时间内判定字符串A[1,n]A[1,n]A[1,n]是否为字符串B[1,m]B[1,m]B[1,m]的子串,并求出AAA在BBB中各次出现的位置。关于哈希求解关于模式匹配,我们显然可以用哈希在线性时间内求解,但是过于呆板难以扩展。由于哈希代替各种字符串的做法比较固定,此处不做介绍。KMP算法的小复习fail[i]fail[i]fail[i]表示“...原创 2018-10-25 12:48:35 · 213 阅读 · 0 评论 -
简单复习一下中国剩余定理(CRT)
形如以下的方程组,可用CRTCRTCRT解决: ⎧⎩⎨⎪⎪⎪⎪⎪⎪x≡a1&amp;amp;amp;amp;amp;nbsp;(mod&amp;amp;amp;amp;amp;nbsp;m1)x≡a2&amp;amp;amp;amp;amp;nbsp;(mod&amp;amp;amp;amp;amp;nbsp;m2)...x≡an&amp;amp;amp;amp;amp;nbsp;(mod&amp;amp;a原创 2018-08-25 16:14:57 · 437 阅读 · 0 评论 -
简单复习一下exgcd(扩展欧几里得)
经典问题:已知整数a,b,ca,b,ca,b,c求整数x,yx,yx,y使得ax+by=cax+by=cax+by=c由于ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b)有解,设通过exgcdexgcdexgcd求出的一组解为(x0,y0)(x_0,y_0)(x0,y0)则任意解为:(x0+kb′,y0−ka′)(x_0+kb&amp;amp;#x27;,y_...原创 2018-10-15 23:29:33 · 176 阅读 · 0 评论 -
卡特兰数的几种模型整理
CatnCat_nCatn表示卡特兰数的第nnn项,且存在关系:Catn=1n+1C2nn,CatnCatn−1=4n−2n+1Cat_n=\frac{1}{n+1}C_{2n}^n,\frac{Cat_n}{Cat_{n-1}}=\frac{4n-2}{n+1}Catn=n+11C2nn,Catn−1Catn=n+14n−2nnn边形的剖分凸n+2n+2n+2边形用n−...原创 2018-10-17 16:38:53 · 1265 阅读 · 0 评论 -
简单记录一下费马小定理与欧拉定理
费马小定理如果ppp是质数,且gcd(a,p)=1gcd(a,p)=1gcd(a,p)=1,则有ap−1≡1 (mod p)a^{p-1} ≡ 1\ (mod\ \ p)ap−1≡1 (mod p)应用:求逆元已知ppp是质数,且gcd(a,p)=1gcd(a,p)=1gcd(a,p)=1,求aaa在模ppp意义下的乘法逆元。...原创 2018-11-09 20:51:23 · 293 阅读 · 0 评论 -
简单复习一下卢卡斯定理(Lucas)与二项式定理
若ppp是质数,则有:Cnm=Cn%pm%p∗C⌊np⌋⌊mp⌋&amp;nbsp;&amp;nbsp;&amp;nbsp;(mod&amp;nbsp;&amp;nbsp;p)C_n^m=C_{n\%p}^{m\%p}*C_{⌊\frac{n}{p}⌋}^{⌊\frac{m}{p}⌋} \ \ \ (mod\ \ p)Cnm=Cn%pm%p∗C⌊pn⌋⌊pm⌋&amp;nbsp;&a原创 2018-10-16 01:04:01 · 325 阅读 · 0 评论 -
Python之format使用介绍
文章目录介绍位置映射设置参数介绍 Python2.6开始,新增了一种格式化字符串的函数str.format(),它增强了字符串格式化的功能。基本语法是通过 {} 和 :位置映射list=[1,2,3]print("{},{}".format("1","2",list))print("{0},{1},{2}".format("1","2",list))print("{0},{1},{1},{2}".format("1","2",list))>>> 1,2>原创 2020-12-14 17:07:16 · 479 阅读 · 0 评论 -
Python复习笔记
文章目录1 前言2 包含3 复习笔记4 其他1 前言辅助行 CQU大一上学期自行选择模块1或2来学习专业课,其中选择模块1即学习Python,2即学习C。博主自身考虑到有C++的基础,所以选择了Python的学习,也即模块1。 但是对于Python这门语言,自己本身并没有多大的兴趣,并且自认为之后的学习与实践中用到Python并不多(结合博主之后的学习情况,更多会用到C++、Java),因此并未多么用心去学习Python这门语言(勿喷),只是为了考试。平时上课并没有怎么学Python,只是跟随布原创 2020-12-07 16:55:50 · 1389 阅读 · 0 评论 -
算法学习之最短路【Dijkstra】【Bellman-Ford】【floyd】【spfa】
一、Dijkstra适用范围:求单个点到每个点的最短距离、非负边权算法思想:从起始点开始枚举每一个点,在所有未访问过的点中找到边权最小的点(此处用优先队列优化),对找到的点进行松弛更新操作。时间复杂度:O(nlogn)O(n\log n)O(nlogn)板子题:LOJ #119. 单源最短路#include <cmath>#include <queue>#include <cstdio>#include <cstring>#include原创 2020-09-25 01:34:39 · 229 阅读 · 0 评论 -
【复习】【差分数组】【树状数组区间修改】
差分数组的构建即在原数列的基础上,第nnn项与第n−1n-1n−1项做差得到新数列。记a[]a[]a[]为原数组且a[0]=0a[0]=0a[0]=0则差分数组c[]c[]c[]中的任意一项c[i]=a[i]−a[i−1],i>0c[i]=a[i]-a[i-1],i>0c[i]=a[i]−a[i−1],i>0那么a[i]=∑j=1ic[j]a[i]=\sum_{j=1}^ic[j]a[i]=∑j=1ic[j]差分数组的应用当我们需要对数组区间[x,y][x,y][x,y]进行原创 2020-09-14 07:25:16 · 113 阅读 · 0 评论 -
【复习】【辗转相除法求gcd原理】
gcd即最大公约数首先我们知道这么一个公理:如果a%b==0a\%b==0a%b==0,那么b=gcd(a,b)b=gcd(a,b)b=gcd(a,b)然后我们再来证明一下辗转相除法最关键的一点:gcd(a,b)=gcd(b,a%b)gcd(a,b)=gcd(b,a\%b)gcd(a,b)=gcd(b,a%b)证:设c=gcd(a,b)c=gcd(a,b)c=gcd(a,b)则a%c==0、b%c==0a\%c==0、b\%c==0a%c==0、b%c==0且(xa+yb)%c==原创 2020-09-09 20:46:49 · 298 阅读 · 0 评论 -
【复习】【树状数组】
一、lowbitint lowbit(int x) {return x&(-x)}作用:取出十进制数x二进制表示中由最低位往最高位方向的第一个1如10的二进制为(1010)2(1010)_2(1010)2取出由最低位往最高位方向的第一个1:(10)2(10)_2(10)2即为数字2这个时候我们如果将原数x减去这个数的lowbit,在二进制的表示当中,我们就消除了由最低位往最高位方向的第一个1原理首先了解一下负数的二进制表示:计算机二进制中为了区分正负数,在最高位上原创 2020-09-09 19:22:16 · 193 阅读 · 0 评论 -
【复习】【并查集】
并查集:若干个元素不断放入共同的“堆”里面,中途查询某两个元素是否属于同一个堆初始化:将每个元素放在以自己为编号的“堆”for(int i=1;i<=n;i++) f[i]=i;路径压缩找相同的“堆”(找父亲)public static int find(int x) { if(f[x]==x) return x; return f[x]=find(f[x]);}合并两个元素先判断是否处于同一个“堆”,如果不是就合并public static void merge(i原创 2020-09-07 00:41:00 · 141 阅读 · 0 评论