- 博客(10)
- 收藏
- 关注
原创 P6186 [NOI Online #1 提高组] 冒泡排序 的 个人见解
由于当数x1>x2时,x1与x2进行交换会使x2的逆序对数量减一,所以每次冒泡如果当前有 x 个可以同自己右边的数进行交换的数,所有 同自己左边的数交换 的数的逆序数都会减一,逆序对就减少了 n−x 个。每输入一个数x,树状数组tree就会在x的位置加1,每个数的逆序数为 该数字前的数字的个数 减去 数字前比该数字小的数字的个数,数字前比该数字小的数字的个数 又等于 数组中 该数字位置的前缀和。作为小白的作者,看了佬们的解析后依然困惑,所以写了这份菜鸟也能看懂的超详细解析,可能有一些表达错误,勿喷。
2024-01-16 16:00:56 468 1
原创 P3367 【模板】并查集 ——神奇的找老大之法
根据题目,我们要做的,是在不断合并中,知道两个集合是否是在一个集合中,所谓的老大,就是一个集合中的某个数,该集合中是其他数则为“小弟”,在集合合并时,只要将一个”老大“变成另一个”老大“的“小弟”,然后逐个将一个集合的所有数连接到另一个集合的“老大“上去。最后判断两个数的”老大“同一个即可;
2023-12-11 19:54:28 25 1
原创 我见到的那几个链表
链表的某一个节点,包含了数据和指向下一个节点的指针。该方法也常用于表示节点与节点间的边;(又是水分极高的一篇文章)我们都知道链表这个东东。过于简单,不作说明;
2023-12-11 19:43:06 26 1
原创 Floyd和Dijkstra算法的习后心得
思想可以简述为:Disk[n]表示节点start到各个点的最短距离,初始值为∞,Map[n][n]表示节点和节点之间的距离的矩阵图。然后进行循环,每一次找出Disk里的最小值,即离节点start最近的节点(因为不可能存在另外的节点使得更近),然后进行松弛操作,对剩余的节点进行更新,直到所有节点更新完毕。思想可以简述为:对每一个节点做假设,设有一个节点xk,使得有dis(xi,xj)>dis(xi,xk)+dis(xk,xj),然后进行替换。是全源最短路, 时间复杂度是O(n³),可以处理负权边。
2023-12-03 20:46:34 30 1
原创 对于P1162 填涂颜色的心得
从圈的左上角开始找,故有一个非圈边上的点(x,y),这里的,只要满足(x-1,y)(x,y-1)(x-1,y-1)这三个点非零的,就可证明(x,y)必定在圈内。但也因为如此,我们可以发现上诉条件是有对称性的,因此我们只需从右下角开始倒着找出现错误的点然后修正即可。当然这个算法有漏洞,就是当右下角出现。会使上诉条件在圈外的地方成立。
2023-11-15 19:43:24 11 1
原创 说说常见的背包问题
比如:Map[j]=max(Map[j],Map[j-cc[i].t]+cc[i].value),这里cc[i].tt便是一个物体占用的空间;代码中是一个一维的数组(也可以用二维),将不同情况下(背包空间大小),对一个物品如何装令价值最大的结果进行推理;很简单只需要改变每一次搜索的方向(在本代码中就是第二个for循环里面的for循环)背包问题中,我们常常看见物体只能装一个,或可以装有限个(比如666个);至于装多少,只需要加一个if语句判断(这里有多种方法,不一一道来)从后往前,就是只能装一个;
2023-11-14 19:34:51 18
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人