自定义博客皮肤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的博客

一只自由的小鱼

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

原创 Codeforces EDU Round 179 A~D

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

2025-06-06 23:18:11 1019

原创 DP单调队列优化

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

2025-06-05 14:06:28 628

原创 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 908

原创 P4549 【模板】裴蜀定理

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

2025-06-01 21:17:11 838

原创 手拆STL

手拆STL的容器

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

原创 Bitset

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

2025-05-27 21:29:19 858

原创 P8943 Deception Point

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

2025-05-24 17:36:58 1032

原创 IDA*算法讲解及例题

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

2025-05-23 14:49:58 913

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

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

2025-05-15 16:55:25 658

原创 关于函数的事情

Something about function.

2025-05-04 14:00:23 954

原创 裴蜀定理及其证明

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

2025-05-03 11:46:17 949

原创 莫比乌斯函数μ

莫比乌斯函数μ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 948

原创 欧拉函数φ

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

2025-04-12 10:09:30 1003

原创 汉化进度100%

【代码】汉化进度100%

2025-04-10 17:38:43 509

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

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

2025-04-04 17:54:29 714

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

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

2025-04-04 10:25:12 993

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

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

2025-03-29 10:02:36 336

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

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

2025-03-28 21:18:09 668

原创 P2617 Dynamic Rankings

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

2025-03-22 16:22:17 766

原创 我勒个2048

【代码】我勒个2048。

2025-03-22 11:51:26 120

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

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

2025-03-18 22:07:03 682

原创 模版题目的集合

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

2025-03-14 21:40:57 347

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

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

2025-03-08 15:41:05 635

原创 分块(莫队补充)

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

2025-03-07 21:17:47 775

原创 归并排序求逆序对

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

2025-03-01 23:06:26 1013

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

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

2025-03-01 22:13:28 554

原创 莫队算法讲解及例题

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

2025-02-22 16:59:44 941

原创 Game*3

【代码】Game*3。

2025-01-05 17:13:07 102

原创 【三子棋】

自编,不是靠打谱来下棋的,只判断了最基础的胜负条件。

2025-01-04 22:41:36 126

原创 还有人不会归并排序吗?

为什么今天在机房看到有一位“大佬”在归并排序的函数下面默默地调用了一个sort??(戳一戳zzx)

2024-10-24 23:01:06 272

原创 树上任意两点的距离

树上任意两点的距离

2024-10-24 22:33:52 609

原创 P3367 【模板】并查集

并查集模版

2024-09-08 16:26:38 710

原创 P4588 [TJOI2018] 数学计算

小豆现在有一个数x,初始值为1。小豆有Q1 m:将x变为x×m,并输出xmodM2 pos:将x变为x除以第pos次操作所乘的数(保证第pos次操作一定为类型 1,对于每一个类型 1 的操作至多会被除一次),并输出xmodM。

2024-08-29 20:44:29 1055 1

原创 我的创作纪念日

但是有一次在查东西的时候,看到个话题,然后就发了一篇。于是我就从动态规划开始写,然后图论,搜索,三分,线段树。发博客我觉得还真的挺有意思,平常是不是就想来一篇,但是时间问题,发的不是很勤。我写文章不是为了别人写,我写是我自己乐意,写写东西正好就放松一下,顺便还能把自己知道的讲给别人,两全其美。在写题目解法,算法思路的时候,就好像把题目自己重新做一遍,思路也重新捋了一遍,之后遇到这种类似的题目,基本上不会有想半天一行代码打不出来的情况。越写越多,虽然我不知道别人的看法如何,但是我觉得自己挺满意的。

2024-08-24 14:48:22 234

原创 P3373 【模板】线段树 2

根据乘法分配律,把一个区间的每个数乘x,对于区间和的改变也是乘x,所以我们找到被包含的区间之后,就将区间和乘x,但是别忘了,乘法同时也会影响上下层的线段树,所以说我们要加上一个乘法的懒标记,并且在这个时候,因为我们乘上了x,本来区间叫法的懒标记也会被卷进去,所以我们还要把加法的懒标记乘x,别忘了随时取膜然后我们来看pushdown函数,它将区间状态依次传递到最底层。左右孩子的区间和我们用ans来表示

2024-08-22 11:02:12 995

原创 线段树-区修区查

想一想,一个区间,每个数加上x,那么区间之和就和增长区间长度*x,所以,我们只要找到一个被完全包含的区间,就可以将他的区间和修改,注意,这里我们要打一个懒标记,因为这里的区间和被修改了,那更上层和更下层的区间和也会有变动。如果这个点被打了懒标记,就说明他是被修改的,那他的左孩子右孩子就也会做变动,所以就把左右孩子进行区间修改,接着把懒标记传递下去,最后不要忘了清除当前点的懒标记。当op为1时,输入l,r,x,表示将了l到r的区间内每个数加上x。区间修改,在点修区查的时候讲过的区查函数,现在给他放在这儿。

2024-08-22 10:06:09 413

原创 线段树-点修区查

所以,我们可以得出结论,求区间和,只需要遍历线段树,只要遍历到的点代表的区间被完全包含,就直接加上这个区间的和,当然,这种方法是不会出现重复的啦。只要遍历到的当前点左边界是x,右边界也是x,就可以确定它是我们要修改的点,修改它之后,在按照建树的方法,中分,求区间和,进行向上修改就行了。这里说一下,就是中间两个if语句,是用来精确范围的,如果小了,就往大的找,如果大了,就往小的找,总会找到x的。我们要修改的点,肯定是原数组中的点,所以在这颗线段树里一定是叶子结点,因为不是叶子的点都存储的是区间和。

2024-08-21 22:44:33 510

原创 P2080 增进感情

对于这n种事情,每种事情可以选择做或者不做,这里的n最大是30,每个事情的两种选择,2的30次方大概1e9,会超时,所以我们在最优情况:总和大于等于v并且好感值之差的绝对值等于零时,就没有再进行优化的的可能了,就直接输出零了。现在,他们对对方的好感值都为 0,小明有 n 件事可以干,每件事可以增加他对小红的好感 ai​ 点,并且增加小红对他的好感 bi​ 点。他们以后的生活将取决于两人的好感值之差的绝对值,这个值越小,他们的生活将越幸福。一行,一个非负整数,表示两人在一起的前提下,好感值之差的最小绝对值。

2024-08-16 21:26:56 276

原创 P8306 【模板】字典树

sn​ 和 q 次询问,每次询问给定一个文本串 ti​,请回答 s1​∼sn​ 中有多少个字符串 sj​ 满足 ti​ 是 sj​ 的。查询的时候,就一步一步在树中找,如果找到叶子结点了,但查询的单词没找完,就说明它不是已出现字符串的前缀,如果找完了字符串,就说明是。在输入模式串的时候,就根据上图的思路,按字符串每一位查找,并且存储。第一行是两个整数,分别表示模式串的个数 n 和询问的个数 q。接下来 n 行,每行一个字符串,表示一个模式串。接下来 q 行,每行一个字符串,表示一次询问。

2024-07-09 19:21:47 491

原创 P1656 炸铁路

如果y的追溯值大于了x的时间戳,也就是y的追溯值在x之后,并且,y追溯到的这个点与x一定不连通,因为如果连通,那么y就会顺着这个点追溯到时间戳更小的点x,到这里,我们不难推出:x与y之间直接连通的边,只有这一条,并且没有间接联通的边。炸毁一条路对于一张图来说,本质上就是去掉一条边,不能通过铁路到达就代表这张图不连通了,对于这种去掉之后就可以使整张图不再连通的边,我们称之为割边。第一行 n,m (1≤n≤150,1≤m≤5000),分别表示有 n 个城市,总共 m 条铁路。里面里面讲过,这里就不多说了。

2024-06-19 18:36:28 575 1

空空如也

空空如也

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

TA关注的人

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