自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 并查集c++

这时我们只需要把所有节点向上回溯,找到一个“最老的祖先”,然后当需要判断时,判断祖先是否一致就可以了,即判断是否在一个并查集内。当我们想要合并两个并查集时,只需要将其中一个并查集的“祖先”与另一个并查集创建连通关系就可以了。一开始时,我们不知道那些节点是连通的,因此每个点的祖先都是他自己。在开始时,因为还不清楚每个人家族的情况,因此对于每个人,家族大小都初始化为1。记录路径长度,可以在递归寻找祖先时,开一个新的数组记录到根节点的长度。合并时,不只要改变祖先,a家族并入b家族时,b家族的大小也应该改变。

2024-03-31 00:57:04 294 1

原创 CF1520补题报告

枚举所有普通数(因为普通数在1e9范围内只有81个),找出n,然后枚举过程中计数。构造一个n*n的矩阵,1~n^2在矩阵中都值出现一次,且相邻的格子数不相邻。否则,先将全部奇数放入格子,再将全部偶数放入格子,奇数间与偶数间一定不相邻。十进制中每个数位都相同,则称这个数为普通数。求1~n中有几个普通数。如果一个正方形矩阵中两个格子有公共边,则两个格子是相邻的。需要特殊考虑n=2的情况,此时是无法画出符合要求的矩阵的。输入n个数,找出有几对数值差等于下标差的数。如果n为1,直接输出1即可。

2024-03-10 01:15:06 350 1

原创 单调栈与单调队列

同单调栈类似,单调队列是在入队出队过程中维护队列单调递增或递减。此外,单调队列还有控制长度的功能。单调队列通常情况下与单调栈可以互相转化。

2024-02-05 00:56:18 610 1

原创 KMP算法

Next表是一个存储border的表。Next[i]表示以i结尾的非前缀子串与到i为止的前缀最长匹配长度。即以i结尾的前缀的border。例如:ababa。Next[0]必然是0。因为以0结尾的前缀为a,它的border不能与原字符串等长,即不能大于一,因此它没有border。接着是Next[1],前缀为ab,这个子串前后缀没有公共部分,因此border也为0,所以Next[1]=0。然后Next[2],前缀aba,border为1,因此Next[2]=1。

2024-02-04 22:36:00 1529 1

原创 CF1624补题报告

若出现未标记的数,直接判断no,若出现不为一且出现次数大于一的数,则继续除,并将新产生的数标记到前面的数组空间中。但这个思路有一个问题,即当某个元素能同时除出两个n以下的数,且仅有这个元素能除出这两个数时,代码会判定为可以,但事实上却是不可以的。首先想到使用一个数组记录1~n的所有数,每个数除到n以下时,标记数组记录以下。给定三个整数a,b,c,进行一次操作,可以给abc任意一个×正整数m,若能构造成等差数列输出yes,否则输出no。因为要次数最少,所以最大的应该不动,次数就为最小值加到最大值的次数。

2024-02-02 01:17:58 341

原创 字符串哈希

例如:有字符串abc,a哈希值为a,ab哈希值为a*128+b,abc哈希值为a*128*128+b*128+c,因此,若想要求bc哈希值,使用abc-a哈希值即可。查询时,遍历所有哈希值,若存在相同哈希值,则按编号找到对应意思。因此枚举密文长度k,若后n-k个和前n-k个子串的哈希值相同,则密文为前k个。它的完整字符串应为:前半段为密文,后半段为明文,两端拼接而成的字符串。输入n,以及n行,每行两个词,第一个词表示意思,第二个词表示单词。接着输入m,以及m行,每行一个词,表示要查询的词。

2024-01-30 21:17:58 401 1

原创 矩阵快速幂

首先假设有两个矩阵,行列数分别为n1行m1列和n2行m2列,只有n1=m2时,两矩阵才能做乘法运算。矩阵加法是由两个行列数相等的矩阵进行的运算,结果也为同样的行列数。其具体运算方式为两矩阵对应位置的数相加,放入答案矩阵的相同位置里。当在一个运算系统中,对于运算Δ,若存在x,对于任意y满足xΔy=yΔx=y,则称x为此运算系统的单位元。矩阵数乘是由一个数字乘上一个矩阵。快速幂的优势就是便于取模,因此在写矩阵快速幂时,我们也需要将矩阵取模。在矩阵幂运算中,单位元为从左上到右下为1,其余都为0的矩阵。

2024-01-04 22:10:15 326 1

原创 积性函数和欧拉函数

即1到n与n互质的数的个数。可以推得:其中p为n所有质因数。因为所以可得。

2023-12-23 23:57:50 385 1

原创 数论和逆元

当a%m=b%m时,称a≡b(mod m)p为质数,p∤a时,a^(p-1)∤1(mod p)证明构造A={x|1

2023-12-09 23:22:24 57 1

原创 拓扑排序与动态规划

拓扑排序,是对有向无环图(DAG)的一种操作,把有向无环图按一定顺序排成一个线性序列。例如这张图,将此图排为1-2-3。

2023-12-02 10:39:04 73 1

原创 CF1878补题

当a为奇数序列时,a[i-1]与a[i-2]都为奇数,所以a[i-1]+a[i-2]为偶数。这道题首先要用前缀和。若f[r][j]-f[l-1][j]=r-l+1,那么第j个应出现在区间[l,r]的所有元素中。找出一个索引 i,使得 l[i]<=x<=r[i],让a=min(x,r[i]+l[i]-x),b=max(x,r[i]+l[i]-x)保证:l[1]=1,r[k]=n,l[i]<r[i],l[i]=r[i-1]+1。给定n大小的数组a,定义f(l,r)为a[l]&a[l+1]&...&a[r]。

2023-11-25 23:52:59 47

原创 CF1872补题

有若干个房间排成一行,其中有n个房间有陷阱,对于这 n 个房间,它们有两个属性:di​ 和 si​,分别代表标号和陷阱形成的时间,即若你第 t 秒第一次到达 i 号房间,t+si​ 秒时陷阱就会在此房间形成,此后你无法通过此房间。给定三个整数n,x,y,对于 n 的排列 p,有score(p)=(px​+p2x​+p3x​+…求可能的最大score。先删除一个点后,环将变成链,除了链尾的点,其他点都会造成两倍的贡献,考虑贪心,将点权最小的点设为链尾的点,那么最先删除的点就是环上连像它的点,它所害怕的点。

2023-11-19 08:13:52 81 1

原创 C++树状数组

想要查询a[1]~a[x]区间的和的时候,可以从c[x]开始累加,接着将下标减去lowbit(x),以此类推,直到x-lowbit(x)

2023-11-05 08:07:26 34

原创 C++ST表

ST表是一种基于倍增思想的数据结构。常用来解决静态区间最值问题。ST表用于解决可重复贡献问题。例如有n个数的数列A,有m个区间,求区间[l,r]最大值。区间最大值是一个可重复贡献问题,所以可以对其进行预处理。对于这个问题我们能使用至多两个预处理过的区间来覆盖询问区间。设f[i][j]表示数列A中在[i,i+2^j-1]的最大值,即从第i个数开始2^j个数中的最大值。然后可以得到以下表达式:当需要求[l,r]最大值时,需要计算首先根据得接下来根据r−l+1<2^k+1得。

2023-10-13 23:48:47 344

原创 优先队列和重载运算符

这段代码声明了一个有两个成员变量x和y的结构体st,并通过重载运算符定义了当两个st类型数据使用'<'进行比较时,返回值为两个数据x成员变量的比较结果。因为增删元素需要一层一层交换,所以时间复杂度为其层数,即当有n个元素时,优先队列增删元素时间复杂度为O(log n)优先队列(priority_queue)是一种每个元素都有优先级的一种数据结构,通过二叉堆实现的。这种声明方法默认的是降序排列,或者说较大的元素在前面,队头为最大的元素。现有以上降序二叉堆,若要增添元素50,则先将元素50放置于元素30下。

2023-09-20 21:13:03 223 1

原创 常用STL

unordered_set与multiset和set的关系,与unordered_map与multimap和map的关系类似。这种map是无序的map,使用方法类似于map。unordered_map底层逻辑为哈希表,所以较为省时,所有命令时间复杂度趋近于O(1)。栈(stack)是一种先进后出的数据结构,只能从栈顶操作,插入或删除元素。即,会自动排序,但也会出现两个相同的元素。map中的顺序是有序的,根据键从小到大排列,没有两个键相同的键值对。这种map是一键对多值的map,存在于头文件<map>中。

2023-09-17 16:31:19 34

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除