- 博客(26)
- 收藏
- 关注
原创 【算法进阶详解】树状数组
树状数组在算法竞赛中十分常见,其能解决二维数点,区间数颜色等问题,还具有较小的常数,是一个十分优秀的数据结构。如果文章有问题欢迎在评论区指出。
2025-02-16 20:52:55
1086
原创 【从算法小白到 csp-j 一等 第三节】递推与递归
递归与地推在算法竞赛中的重要性及其重要,是之后动态规划与搜索的重要基础。递推指从给定条件出发,依据某种递推关系,依次推出所有中间结果及目标结果的方法。递归指把一个大型复杂的问题层层转化为一个与原问题相似的、规模较小的问题来求解的方法。化成的子问题和原问题求解方法相同,只是数字大小不同。递归次数有限,即递归到一定程度,递归函数可以结束,有结束的条件,即递归的边界。
2025-01-19 20:26:52
710
原创 【从算法小白到 csp-j 一等 第二节】贪心
本文介绍了贪心的定义,以及在题目中的具体应用,并设置了习题。希望能够帮助到读者。官方贪心指每次决策时执行局部最优解以得到全局最优。我一般把它理解为按照某些特定的规则求解或对满足某些特定规则的范围枚举求解以得到最优解。看一个例题。贪心是一种基本思想,通过一定步骤获取最优解,在竞赛中尤为重要。
2025-01-02 11:35:25
955
原创 【从算法小白到 csp-j 一等 第一节】枚举 + 模拟
枚举就是在一个集合中枚举每一种情况。看个简单的例子。模拟就是按照题目的要求直接做。先来看一个例子。枚举、模拟虽基础,但他们是其他更难算法的铺垫,只有打好基础,才能在日后的学习中更加轻松。
2024-12-26 18:53:24
845
原创 详解有向图最长链问题
走 4 -> 8 -> 9 -> 4 这个环一定比不走更优,因为这是个强连通分量,强连通分量内部可以互相到达,就是说进入和出去的点可以任意选,且把所有点都走了并不会影响接下来的行动。因此我们直接把每个强连通分量缩点,如果进入强连通分量中的一个点,就把整个强连通分量都走完。的特性,强连通分量本身就满足拓扑序的逆序。(长度为经过的点数,重复只算一次,点、边可以重合)接下来我们发现,同一个强连通分量中的点最好都选上,如下图。我们把每个强连通分量存一个它里面的点数,如下图。,表示终点是这个点的最长链,初始化。
2024-11-29 16:10:45
549
原创 SCP 2024 第二轮(复赛 J 组)模拟 T3 三目运算 题解
代码放在下面,建议大家不要 Ctrl c + Ctrl v,自己写一遍会有更大的进步。我们发现,每次判断都是先看红色部分。如果结果为真判断黄色,为假判断蓝色。每次到一个结点时,二分判断那部分往左走,哪部分往右走。考虑离线,把所有询问读进来,并排序。每个询问从上往下 dfs 即可。因为如果树是一条链,单次查询为。求一个只含三目运算符和数的含。判断过程可以看作一个树形图。,于是 TLE 了。
2024-10-17 11:44:38
1097
原创 SCP 2024 第二轮(复赛 J 组)模拟 T4 配对序列 题解
于是转移可以被转化为查询区间最大值,每次算完结果后当前状态更新数组。整个操作可以总结成单点取。枚举每个数是否选,最终判断是否满足性质即可。给定一个序列,求最长的该序列的满足如下性质的子序列。, 区间查询最大值。我们考虑建一个数组,每个下标。位中,最后一对已经有。给出子序列的长度即可。
2024-10-14 07:49:17
1125
原创 洛谷 P3092 [USACO13NOV] No Change G 题解
在依次进行的购买N个物品的过程中,约翰可以随时停下来付款,每次付款只用一个硬币,支付购买的内容是从上一次支付后开始到现在的这些所有物品(前提是该硬币足以支付这些物品的费用)。不幸的是,商场的收银机坏了,如果约翰支付的硬币面值大于所需的费用,他不会得到任何找零。约翰想按顺序买 N个物品(1 <= N <= 100,000),第i个物品需要花费c(i)块钱,(1 <= c(i) <= 10,000)。的方案算在答案里,把没用过的硬币状态的硬币的面值加在一起。开始的最多的硬币的硬币数。硬币面值,则说明答案在。
2024-10-10 20:37:10
847
原创 NOI2004 郁闷的出纳员 题解
如果是就把当前数删除,如果不是就立即返回。(因为删除操作的循环次数与一共删除的数的个数是同一级别的,最多删除。删除数字可以在每次操作后从小到大遍历平衡树,看一下当前数是否。题目要求维护一个集合(可重集合),很容易想到用平衡树。的数都打上删除标记,在进行别的操作时跳过就可以。删除数字可以在每次操作结束后循环数组,把。级别次,删除的总时间复杂度为。平衡树的实现方法有很多,我使用。暴力其实很好想,使用数组维护。
2024-10-05 16:14:23
898
原创 ABC371E I Hate Sigma Problems 题解
再去看这道题,我们先从暴力开始,一步一步优化,最终成功解决了题目。巧妙的做法往往不是一蹴而就的,而是一步一步优化得到的结果。
2024-09-16 13:50:37
1363
原创 洛谷 CF1999F Expected Median 题解
预处理就行,预处理阶乘和阶乘的逆元,不知道什么是。我们发现,一个序列的中位数为。既然是方案数,那我们考虑组合计数。,这对我们解题提供了很大的便利。所以题目相当于是问中位数。的子序列有多少个呢。
2024-08-08 16:50:32
1997
原创 洛谷 CF1999E Triple Operations 题解
由于操作1不会改变总和的大小,也就是说,前面怎么做对后面的操作次数都没有影响。显然,第三种操作只会让结果更劣,所以我们不做第三种操作。数组直接暴力预处理即可,然后将其求前缀和。的总和次操作下完成,因此这么做是最优的。的总和次操作,如果选择一个不为。进行操作,直到所有数均为。接下来,我们要证明,将一个。,再进行上面的操作是最优的。,把别的一个任意数当作。,那么由于每次总和最多。进行操作二,就可以在。
2024-08-08 15:40:56
931
原创 洛谷 CF1999D Slavic‘s Exam 题解
对于任意一个解,我们把所有没有在第一次就匹配的位置换成第一次就匹配,就转化成了一种合法贪心解。因此有解贪心就一定能找到解。首先,这样做符合题目要求,所以我们只需证明,如果问题有解,那么贪心策略一定能找到一组解。的每一位,如果当前第。
2024-08-07 16:30:53
2203
原创 洛谷 CF1999C Showering 题解
加上两个额外区间是因为这样好判断开始到第一个区间和最后一个区间到结尾的情况,排序时会排到开始和结尾,不会影响别的区间的判断。下一个区间的左端点,所以任意两个相邻区间之间都没有别的区间,所以任意两个相邻区间中间都是空闲时间。,按左端点排序,判断相邻两个区间前一个区间的右端点和后一个区间的左端点是否间隔。因为每个两个不相邻区间之间都有别的区间,所以整段的空闲时间都在相邻两个区间。由于区间没有重叠,所以排完序后任意一个区间的右端点都。(两个额外区间代表一天的最开始和一天的最结尾)。
2024-08-07 15:13:14
908
原创 洛谷 CF1999B Card Game 题解
枚举每个人第一次选的卡片,第二次选的就是第一次选剩的,统计两次两人胜利的数量,最终输出Suneet胜利的。Slavic胜利的数量的情况数。
2024-08-07 14:37:17
358
原创 bfs详解
为什么队列非严格递增,为了好证明,我们证明非严格递增和两段性(距离为一段x和一段x + 1,也可以是一段x)。其次,对于中间的过程,如果一个队列满足非严格递增和两段性,我们看一下用对头更新后队列会是怎么样。如果一个节点被遍历到的第一时刻,它的距离不是最小的,那么一定存在一个节点,比更新它的节点它晚出队,而且比更新它的节点的距离更小。每次取出队头节点,遍历每个能走到的节点,如果被遍历的节点是第一次被遍历,就将其距离设为当前节点+1,然后将其插在队列尾部。说明此节点无法被遍历,否则为它距源点的真实距离。
2024-08-06 09:57:15
384
原创 洛谷 P3356 火星探险问题 题解
有若干个机器人,在一个方格阵上向下或向右行走,从左上角走到右下角。机器人不能碰到障碍,能收集石块,收集后石块变为空地。表示只有一次采集了石块,其它都直接从上面经过。本题使用最大流拆点,把一个点拆成入点和出点。这符合题目的要求,所以这样建图是正确的。表示空地没有经过次数限制,5容量是。表示机器人出发没有费用,3费用是。表示机器人行走没有费用,4费用是。表示经过次数没有限制,4容量是。表示经过空地没有费用,5费用是。的费用,其余从经过都没有费用。最终求最大费用最大流就是答案。的出点向汇点连一条容量为。
2024-08-05 14:18:11
301
原创 网络流之最大流与最小割
对于每一个左面的边,如果是正向边,就把原网络进入的点加上这条边的流量,把进入的流量加上了这条边的流量;如果是反向边,就把原网络出去的边减去流量,把流出的流量减去了这条边的流量,减少了减去的流量,也相当于加上这条边的流量。,那么中间的一条竖着的边的流量就会被抵消,这样就得到了最大流。这个很好理解,原网络净往外流出的流量加上残留网络净往外流出的流量就等于净往外流出的流量。这是一个可行流,但不是最大流,但是我们如果把绿色部分的流量加。现在我们有两个网络,原网络和残留网络,如果把原网络可行流。
2024-08-04 20:55:34
2495
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人