自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

STY_fish_2012的博客

一只自由的小鱼的博客~

  • 博客(95)
  • 收藏
  • 关注

原创 图论的题目整合(Dijkstra)

前置知识:Dijkstra。

2025-07-23 20:22:19 680

原创 图论的整合

所以可以考虑枚举每一头牛,然后记他们可以到达的点,最后的答案就有所有牛都能到达点的数量。的所有邻接点,邻接点按照度数由小到大输出,如果度数相等,则按照编号有小到大输出。一张无向图,如果任意一个点都可以到达图上的所有点,那么这张无向图就是连通图。由小到大依次输出每个点的邻接点,邻接点也按照由小到大的顺序输出。最开始,除了起点外所有点没有被标记过,起点是最开始被选中的点。(两个点之间不是必须相连)开始模拟:找到被选中的点连接的最小边权的且没有被标记过的点。被标记,并成为下一个被选中的点,直到所有点都被标记。

2025-07-22 21:01:39 1061

原创 二叉树的整合

首先它是一棵树,并且对于每一个点,它最多只有两个子节点。比如:然后有几个概念。满二叉树一颗二叉树,除了叶子结点外,其他的点都有两个子节点,并且叶子结点都在同一层。就像这样:一颗nnn层的满二叉树一共有2n−12^n-12n−1个节点。一颗满二叉树的第iii层有2i−12^{i-1}2i−1个节点。一颗有nnn个节点的满二叉树的深度为log⁡2n1log2​n1完全二叉树。

2025-07-21 19:54:26 594

原创 线性DP的整合

上面例题 1 中已经提到过 DP 的思路,当时为了解决只能用一次的问题,特意将背包容量倒着枚举,而这一次无所顾忌了,每种物品有无穷多,所以正着枚举,这样使计算大容量时小容量已经考虑好。枚举当前物品的数量,因为不是完全背包,所以还是得考虑数量的问题,同 0/1背包一样,也是倒序枚举背包容量,其实其它的就没什么不同了。使背包剩余空间最小,也就是说使用的空间最大,上一题的问题是空间合理时价值最大,这道题的价值变成了空间,其实是一个道理。在动态规划中,一个问题的最优解是根据这个问题的子问题的最优解来处理的。

2025-07-18 10:47:07 910

原创 P2619 [国家集训队] Tree I

多余的白边是什么到前面去的?因为 kruskal 的排序,那么这下知道怎么解决了,我们统一将所有白边的权值加上一个数。,白边的权值变大了,排序时后面的权值较小黑边就到了前面,这样就可以减少白边数量,最后再将在最小生成树中加上的白边的权值。,包最小生成树,记录白边数量,如果大了就往大的二分,小了就往小的二分。对于 kruskal 算法,是对边权排序,然后依次判环然后加边。因为有可能白边数量过少,就需要加负数,所以最小值应该是。之间,是线性且有序的,那么想到了什么?,过多就加整数,最大值为。

2025-07-12 22:54:06 402

原创 拆分map进度1/3

使用了二叉搜索树其实也叫二叉查找树。

2025-07-10 11:02:44 227

原创 前缀和的发疯是终生的

当一个人类又得到了两根木棍……

2025-07-09 08:42:08 990

原创 CF312B Archer

的概率射不中,这个时候他就只能祈祷另一个人射不中,此时的概率就是。,接着又轮到小 R,他需要射中才能赢,所以这次他获胜的概率是。的概率射不中,此时要获胜需要对方。的概率也射不中,在轮到小 R,以。小 R 第一箭就射中的概率是。每次小 R,射完一次箭,有。可以发现这是一个等比数列。

2025-07-07 19:57:17 595

原创 又是自编Game

【2025.7.4】代码写成。

2025-07-04 17:33:00 189

原创 UVA11573 Ocean Currents

BFS的一个重要性质,当边权固定时,一个点第一次被遍历到的代价为最小,也就是说保证队列的队头是队列中最小的。所以,可以将BFS中的普通队列改为优先队列,然后分成上述两种情况搜索,问题解决。其实当只有两种权值时,双端队列的效果类似,但是优先队列更具有普遍性。随意移动到相邻格子,消耗能量,代价为。无边权,最短路,一眼BFS。出现了不同的代价,如何处理?

2025-07-02 18:20:35 200

原创 突发恶疾ing

最终还是得——红黑树(已经成执念了,但是又学不会)的模拟,但是map还可以定义其他的各种类型,但是。的时间复杂度,是否可以考虑用二分模拟map?map的一次查询时间复杂度是。先来看二分模拟的map。

2025-07-02 16:14:24 159

原创 前缀和(1~3维)

再次删除黄色的部分,粉色部分表示重叠一次,紫色部分表示重叠两次。接着删掉蓝色的部分,此时粉色的部分表示重叠部分。对于一个立方体,从中间扣一块出来问你它的体积。这是对于一个二维的矩形块求其中一块的面积。当遇到一个这样的情景,需要你求一个数组。可以看上面这个表格,是的就是他没错了。的时间复杂度求出,就可以用到前缀和。,但是又不止一次询问,所以需要用。当我们知晓大长方形的面积,需要求。一个正方体,如上图,六个面分别为。推广有(区域和为顶点坐标分别为。推广为(一个对角顶点坐标分别是。所以,不难得知结论。

2025-07-02 10:41:12 880

原创 Codeforces EDU Round 179 A~D

当只有两个班级的时候,可以考虑让两个班级在最高层的最底层之间交替上课,可以实现移动最大化。位,所以可以考虑下图:(正方形表示正方体的俯视图,正方形内数字表示正方体的棱长)。可以得出,对于相邻数,互相是有影响的,变化时只用取两端的数左右变化就行了。间教室,教室编号为一个至少三位的数,出去最后两位剩下的表示教室所在的楼层。当出现第三个班级的时候,可以考虑让其在次大层和次小层移动,获得最大收益。可以得出,当两部分相同的数没有相连的时候,互相没有任何影响。个正方体,就能放下所有的正方体。,但明显不是最优的。

2025-06-06 23:18:11 1043

原创 DP单调队列优化

内,那么,通过下图可以发现,其实整个DP的过程类似单调队列滑动窗口。,所以前区间的最小值一定能维护到,方案可行。所以,我们可以考虑用单调队列来优化枚举。由于一段的连续长度不能超过。这个点已经加入单调队列了,不必再加)。是定值,不用枚举,而对于剩下的。可以考虑用单调队列维护最大值。那么,对于当前点的最大值就是。加入单调队列中,维护最大值(的循环,优化后时间复杂度为。,所以答案通过队头就可以。,单调队列循环次数一共是。,先按照题目计算出价值。,然后放入单调队列中。由于普通思想需要枚举。

2025-06-05 14:06:28 651

原创 HDU-2973 YAPTCHA

题目传送门先把题目中的公式弄过来。Sn=∑k=1n⌊(3k+6)!+13k+7−⌊(3k+6)!3k+7⌋⌋S_n=\sum\limits_{k=1}^{n}\lfloor\frac{(3k+6)!+1}{3k+7}-\lfloor\frac{(3k+6)!}{3k+7}\rfloor\rfloorSn​=k=1∑n​⌊3k+7(3k+6)!+1​−⌊3k+7(3k+6)!​⌋⌋首先,得先了解威尔逊定理对于一个素数ppp,有:(p−1)!≡−1(mod p)(p-1)!\equiv-1(mod\ p)

2025-06-04 22:57:32 926

原创 P4549 【模板】裴蜀定理

取负数,两数之积就为正了,所以不用考虑判断。,我们其实可以默认它们全部为。接着,我们其实需要计算的就是。,是可以取任意值的,所以当。所以,最后的答案就是所有。(不全为零),存在整数。

2025-06-01 21:17:11 855

原创 手拆STL

手拆STL的容器

2025-06-01 17:07:50 951 1

原创 Bitset

bitset<长度>名字;当没有写时,需要在前面加上的前缀。

2025-05-27 21:29:19 865

原创 P8943 Deception Point

不是,第一次被一道黄题卡了一个小时……

2025-05-24 17:36:58 1047

原创 IDA*算法讲解及例题

所以,根据上面的情况,我们可以限制一下搜索的深度,超过了深度后就不管了,这样就可以避免无用又浪费时间的搜索。先考虑暴力的思路,已经得到的数存在一个数组里,然后用当前的指数依次去加,找到答案了就return。当我们搜索的对象是一棵树时,找到目标点的时候,此时的深度就是从根节点找到答案的步数。,表示当前搜索的深度,如果其超过了限制深度,就不用管了,直接return。是给定准确目标,优化掉不必要的遍历,这和剪枝的思路也是一样的。第一个参数是最开始的指数,第二个参数是深度。,可以出现的最大情况一定是加上自己变成。

2025-05-23 14:49:58 960

原创 启发式BFS算法讲解及例题

BFS是从一个点向外扩张,四面的扩张是毫无目的的,我们可以在搜索的过程中,给定要找的目标。由于最后的最短路长度只有一个值,所以不是最短路径上的点再去搜索他就是在浪费时间,可以用贪心的思想想一下,比如一个点的现实代价本来非常小,就是最优解,但是“一不小心”估大了,许多比它代价更大的点都在他之前遍历了,有没有起到优化效果了。考虑这样一个问题,一张地图,有一个起点和终点,有障碍物,可以向上下左右走,求起点到终点的最短路。我们需要每个点一个值,表示这个点找到终点的代价,计算代价的这个函数称为。

2025-05-15 16:55:25 677

原创 关于函数的事情

Something about function.

2025-05-04 14:00:23 982

原创 裴蜀定理及其证明

裴蜀定理及其证明,something about Pei "Shu theorem"

2025-05-03 11:46:17 973

原创 莫比乌斯函数μ

莫比乌斯函数μn\mu(n)μn情况函数值n1n=1n1111np1×p2×p3×pmnp1​×p2​×p3​……×pm​−1r(-1)^r−1r其他0其中p1p_1p1​p2p_2p2​p3p_3p3​pm……p_m……pm​指的是nnn的mmm个质因数。注意:这里的p1p_1p1​p2p_2p2​p3p_3p3​pm……p_m……

2025-04-12 10:54:26 999

原创 欧拉函数φ

那么我们可以换一个思路,就是用所有数的数量减去。知道了函数性质,就可以考虑用更优的筛法。的时间复杂度算出一个数的欧拉函数值。欧拉函数求的是有多少个数与代入值。的所有数之和减去它就行了。欧拉函数是积性函数,所以。的欧拉函数,询问时就是求。的欧拉函数值之和,也就是。这道题可以先前置求好。的函数值之和就行了。

2025-04-12 10:09:30 1017

原创 汉化进度100%

【代码】汉化进度100%

2025-04-10 17:38:43 516

原创 康拓展开补充:逆康拓展开

​逆康拓展开可以求解1n的全排列中,字典序第x个的排列。

2025-04-04 17:54:29 721

原创 康拓展开算法讲解及例题

开头的序列字典序都比这个序列小,后面的四个元素都可以任意组合,如:以。注意要用树状数组优化时间复杂度,在树状数组里面记得取模。所以,最后这个序列的排名就是康拓展开后。作第二位才会更小,所以这种情况就有。因为这是一个单调上升的序列,所以。的排序序列,康拓展开可以计算出。,后面没有比他小的,所以贡献为。比如我们有一个序列12345。的,数字互不重复的,且长度为。排列,给定排列是第多少个。指的是当前给定的排列序列,但是,这样做的时间复杂度是。可以在其之后任意排列,这。个值中,比排列序列中第。个值小的元素的数量。

2025-04-04 10:25:12 1013

原创 双向BFS算法讲解及例题

我们可以暴力对每个字符串的变换的每种可能进行查询,用map标记一下是不是在题目要求里面,然后从终点也进行BFS遍历两次相汇的地方就是答案,答案就是把两端遍历的长度加起来,注意要减一,因为相遇的那个点两端都遍历到了,产生了重复。上面这张图中,黄色的部分表示普通的单向BFS查询到的范围,而紫色的范围表示的是双向BFS查询的范围。当然了,双向BFS也是有限制条件的,首先必须得先知道终点,不然根本没法双向BFS。我们从问题的起点与终点同时BFS,起点遍历一层,终点也遍历一层,最终相遇时停止。

2025-03-29 10:02:36 366

原创 权值线段树算法讲解及例题

普通的线段树一般是求区间之和或区间最值,所以这些线段树的每个节点的下标是原数组中的区间范围,每个节点存的是区间和或最值,而权值线段树的每个节点的下标是数组中元素的值,而权值线段树每个节点存的是当前元素出现的次数。在开始建树之前对原数组的值进行离散化,在线段树中操作时,因为经过了离散化,所以最大的值最多也只有元素个个数那么大,所以就可以写不同线段树就行了。这道题我用的是动态开点完成,在原数组输入的时候在update函数对现在贡献的逆序对进行记录,并同时将当前的元素加入线段树中,在查询并累加贡献和。

2025-03-28 21:18:09 697

原创 P2617 Dynamic Rankings

的基础上又增加了一个单点的修改,实际上很简单,既然是单点修改那么就在查的时候改就行了。比如维护数量的树状数组里。的一切值就废了,所以就将树状数组中。,但是我们有一个修改操作要将。,然后就可以把他的值消掉嘞。被改动了,所以原来关于。

2025-03-22 16:22:17 771

原创 我勒个2048

【代码】我勒个2048。

2025-03-22 11:51:26 133

原创 整体二分算法讲解及例题

个查询时,我们就先把查询存起来,然后就可以将查询分为两类,就是上面的两类,左区间和右区间分别用一个数组存起来,然后分类讨论就行了,至于二分,就可以用归并排序的版子。我们二分的对象是这道题目给定的值域,及最小值与最大值之间的区间,在题目给定的数组中,对整体的值域进行二分,我们将。大范围内,所以还需继续查,那么就得往大的查,就将区间左侧放到当前的。,那就说明当前的二分值小了,因为我们需要的是第。大的数,所以当前区间可用,将区间右侧放到现在的。的值的数量大于等于当前的查询。的值的数量小于当前的查询。

2025-03-18 22:07:03 708

原创 模版题目的集合

难度不一定递增,但应该是大致递增的难度。

2025-03-14 21:40:57 355

原创 树状数组算法讲解及例题

的值,使其一直维护区间和。一直往上找,直到找到了一个点包含整个数组的区间和(根节点)为止。,那么和线段树的思想差不多,当子节点被改动时,上层节点的值也会变动,怎么找到上层节点呢?所覆盖的区间,查找下一个区间,所以就在统计完之后用。但是这道题是点查询,所以我们不用写真正的区间修改。的和,先看一下核心思想部分,那个部分讲过点。包含的,所以这个区间的元素和就存在点。每个位置的覆盖范围由二进制最低位的。树状数组的区间查询类似前缀和,是。的范围内,这个区间的点之和是被点。一次排在次低位的数。的值之后,就应该改动点。

2025-03-08 15:41:05 647

原创 分块(莫队补充)

这时候两个端点不在同一个区块里面,所以得提前计算一下每一个块内的元素和。现在因为区间内包含了完整区块,所以说区块的和可以直接拿出来用。是在同一个块里面的,所以说可以直接暴力算,因为一个块的大小只有。十分简单的一道题,可以用前缀和解,但是也可以用分块。的大小,所以就算所有询问都在相同区块也只有。直接说不太好讲,用一道题来帮助理解。时时间复杂度最优,所以这道题也按照。的时间复杂度而已,不会超时。的和(已经前置计算过)再加上。这样,区间查找就可以解决了。的区间和,时间复杂度依旧是。接着上面,再来看比如询问。

2025-03-07 21:17:47 781

原创 归并排序求逆序对

那么就出现了一对逆序对,然而,因为这是归并排序,所以这两端区间都是有序的,所以当。上面是归并排序的代码。在排序的函数中,变量。遍历的是靠左的那半个区间,而变量。的时候用一个变量统计数量就行了。总是成立,当这个时候,如果。遍历的是靠右的区间,所以。对整个答案做出的贡献就是。上图是归并排序的过程。

2025-03-01 23:06:26 1031

原创 P4145 上帝造题的七分钟 2 / 花神游历各国

然就就TLE了,应为如果每一遍都从叶子结点重新找要更改的点太多了,而且许多点改了都用不上,那该怎么办?,而最后的查询是求和,所以找不到什么式子可以直接求出结果。这里的区间查询就是普通的一个求和,所以就不用做什么改动。普通的区查就是加法减法乘法除法,整体的和是有规律可循的。那不妨就暴力一点,每一遍查询就从叶子节点重新找上来。是,我们就再也不用去管他了。已经讲过了,这里就不多说,直接进入正题。有区间的修改,有区间的查询,数据范围。时),再开下去就没有任何意义了。时,这个区间也不用去管他了。可以从数据范围入手。

2025-03-01 22:13:28 562

原创 莫队算法讲解及例题

对于区间查询数字出现次数的问题,我们可以使用莫队。比如,当询问区间是1n时,可以通过ON的复杂度解决。那接下来再询问2n或者1n−1时,就可以通过O1的复杂度解决这个询问。所以,当有m个询问的时候,我们就可以根据第i个询问的结果推出第i1个询问的结果。这样就不用每一次询问都用ON去跑了。于是就产生了优化版:对左端点进行排序。所以我们就可以对左端点进行分块(后面发文章讲)经过,可以得出每个块大小设为n​时,可以使时间复杂度最优。

2025-02-22 16:59:44 951

原创 Game*3

【代码】Game*3。

2025-01-05 17:13:07 107

空空如也

空空如也

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

TA关注的人

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