- 博客(36)
- 收藏
- 关注
原创 题解:洛谷 [语言月赛 202503] 环形游走
比赛链接在每次操作,我们倒退步(),如果,那么需要将。需要注意的是,这种操作的前提是不会白白转圈。所以需要将,避免白白转圈。
2025-03-16 18:54:58
285
原创 题解:洛谷 [语言月赛 202503] 水流
比赛链接赛时想多了,结果 WA 了三发……最后就比较哪个大就好了。如果,输出 LeftToRight。否则输出 RightToLeft。
2025-03-16 18:48:35
212
原创 题解:洛谷 [语言月赛 202503] 半个哥德巴赫猜想
比赛链接首先枚举范围内的所有“缪零数”和质数,随后暴力进行匹配,如果组合等于,更新数量以及最小差。
2025-03-16 18:41:19
229
原创 题解:洛谷 [语言月赛 202503] 蛋挞制作工坊
比赛链接抱歉由于这题还没上传到主题库所以给不了题目链接。总算 AK 了(笑)。实际上,暴力跑次就完事了。实现一个函数,按照第个量为关键字进行排序。我用的是冒泡排序。至于冒泡排序(暴力)是啥不用我多说了吧。
2025-03-16 18:34:32
218
原创 多重背包讲解
二进制优化的核心思想是将每个物品的数量分解为二进制形式,从而将多重背包问题转化为多个 01 背包问题,减少需要考虑的物品数量,以达到优化算法时间复杂度的目的。这种转化不仅保持了问题的最优解,还显著减少了需要处理的物品数量,从而降低了时间复杂度。而且,动态规划计算当前状态时,只需要依赖前一个状态(依赖很久以前产生的状态那是搜索干的事),而不需要保留所有历史状态。抛硬币就是一个极其典型的「无后效性」,无论你之前抛了多少次,正面朝上和反面朝上的概率永远相等,不会因为你前面。次,减少了时间复杂度。
2025-03-16 18:26:08
827
原创 题解:洛谷 P9107 [PA 2020] Wycieczka górska
题目维护到达终点向上走的次数,设向上走的次数为,那么其会向下走次。原因很简单,向上走之后,必然需要找到机会往下走,这样才能到达终点。随后正常跑 BFS 即可(不需要 01-BFS),因为实际上我们的代价是步数,而不是向上走的次数。算出来每个人需要走的时间即可。
2025-03-09 21:50:36
448
原创 题解:洛谷 AT_abc184_e [ABC184E] Third Avenue
在常规的 BFS 上,如果该位置有传送门(字符为 a~z),且该颜色并没有访问过(间接访问不如直接访问优),那么我们向可到达的所有传送门进行扩散。个方向进行遍历,求出到达终点的最小代价。典型的 BFS 问题。
2025-03-09 21:41:16
429
原创 题解:洛谷 P2199 最后的迷宫
题目显然,数据最大,数组我们开不下,动态开数组。对于每一个查询,从起点开始,走一步判断是否能看到火焰杯。如果已经没法走了,直接拆墙,输出 Poor Harry。
2025-03-02 20:22:42
342
原创 题解:洛谷 P11785 「FAOI-R4」手写的从前
题目赛时写出来的,可惜报名晚了一些(大概 1h),卡在第 363 名。首先,我们对进行二进制拆分,拆成若干个二的幂相加的形式。随后,如果这个序列的长度本身就是二的幂次方,直接输出。否则,从最小的不是的数开始拆分,每次拆成这个数的一半(有两个),序列长度加。一旦序列长度达到了二的幂次方,直接输出结果。
2025-02-24 22:05:17
532
原创 题解:洛谷 P3605 [USACO17JAN] Promotion Counting P
题目离散化+树状数组。然后开始遍历整棵树,先将之前比它大的奶牛数量去掉(是它的上级不用管),然后继续向下遍历,加上所有比它大的奶牛数目。
2025-02-15 22:17:00
319
原创 题解:洛谷 P4113 [HEOI2012] 采花
题目运用类似于的操作,将数据离线下来处理。按照区间右端点从小到大排序。问题是数量大于等于的时候才能算进去。于是乎我们用两个数组维护倒数第二次出现和最后一次出现的地方。每次在树状数组中仅保留倒数第二次出现的贡献。
2025-02-15 22:14:11
442
原创 题解:洛谷 P4054 [JSOI2009] 计数问题
题目二维线段树模板题,还挺冷门的。用树状数组维护,设表示从到的矩阵中,有多少个数字是?现在只是解决了到的查询,从到该怎么查询呢?先回忆一下二维前缀和是怎么做的。其中黑蓝色代表上方空白部分,绿色代表左侧空白部分,粉色代表两个空白区间重叠部分,蓝色代表需要查询的区间(上图用到了容斥原理)。
2025-02-15 22:00:39
237
原创 题解:P1825 [USACO11OPEN] Corn Maze S
我们在输入时顺手记下来传送门的位置。如果这个传送门的左端点已经被存储,存入右端点,否则存入左端点。随后从起点开始 BFS。若当前节点为传送门,我们找到与其对应的传送门走过去,节点不需要加入队列,并且不需要被标记(传送门可以多次使用)。接下来我们向“上下左右”四个方向走,如果该格子没有被走过且不是墙,我们就走过去。
2025-02-07 09:16:54
416
原创 题解:洛谷 P5837 [USACO19DEC] Milk Pumping G
题目温馨提示:鉴于数据范围小的可怜,我们可以用暴力一些的想法去做,别看到是普及+/提高就被吓退了。枚举最小流量,然后跑一遍最短路,求出带限制的到的最短路的长度,然后算出的结果,和答案()取最大值。思路简单粗暴,代码也就行左右,应该是不算难。
2025-02-05 20:26:22
213
原创 题解:洛谷 P1608 路径统计
题目本题除了求出最短路,还需要求出最短路径的条数。最短路的部分我就不说多了(跑一遍 Dijkstra 解决),主要是统计出最短路径的条数。如果,即原来的最短路被替换掉了,那么我们用现在的最短路径条数替换掉原来的(即如果最短路径长度相同,那么更新最短路径条数(
2025-02-05 20:13:54
192
原创 题解:洛谷 P1744 采购特价商品
题目这题就是求两点之间的最短路径,边权计算公式:记得开 double 类型。C 语言保留两位小数(顺便附上 Dijkstra 和 Floyd 的实现。
2025-02-05 19:53:41
172
原创 题解:洛谷 P3905 道路重建
题目这题虽然一眼看上去不能看出来是最短路(至少我是这么觉得的),但是我们可以转化一些。将原本就有的边看作边权为,被摧毁的路段看作代价为原来的边权,求出起点到终点的最短路。考虑到用 vector 存图修改边权不方便,于是我们直接用邻接矩阵。最后跑一遍 Floyd 直接完事了,当然跑 Dijkstra 也可以。
2025-02-05 19:25:15
291
原创 题解:洛谷 P1832 A+B Problem(再升级)
题目首先我们先筛质数(下面的实现为线性筛)。然后我们开始设立状态。设表示背包大小为有多少种方案数。随后枚举每一个质数(小于等于背包大小),累加方案:代表背包大小,代表第个质数。初始化:。
2025-02-05 17:09:55
373
原创 题解:洛谷 P1238 走迷宫
题目太坑人了(哭)。给定一个仅包含和的迷宫,我们要输出所有路径。由于我们无法知道走这条路能不能到终点,所以我们需要记下路径,而不是立刻输出。然后开始遍历整张图,如果到了终点,就输出路径。
2025-02-04 17:38:47
300
原创 题解:洛谷 P1657 选书
题目记得最初做这道题时做了好久(笑)。算法是深度优先搜索 + 状态回溯。我们从第个学生开始枚举,如果他喜欢的第一本书没有被选择了,那么我们选择并且标记。对于第二本书同理。
2025-02-04 12:12:32
237
原创 题解:洛谷 P2695 骑士的工作
题目嗯……简单贪心。我们将龙头和骑士从小到大排序。尽量将每个龙头让能力最接近它的大小的骑士来砍。由于龙头已经被排序,所以我们每次只能往后选择(前面比它小砍不了)。如果还是没法砍完,输出 you died!。
2025-02-04 10:59:03
394
原创 题解:洛谷 P1351 [NOIP2014 提高组] 联合权值
题目我们可以发现,若点对的距离为,则它们一定会经过一个中转点,因此我们考虑枚举中转点,然后枚举与有直接边连接的两个点,按照题意统计答案即可。将代码提交上去,不出意外地超时了(不超时那就有鬼了)。怎么优化呢?经过一番冥思苦想,我们发现,。问题是总和怎么优化?看看一个式子:这就是小学数学中的乘法分配律(千万别跟我说你没学过啊喂)。设表示的子树中的权值值和。则可以计算出:。至于最大值和次大值和可以用 DFS 求出。
2025-01-21 18:53:42
763
原创 关于 优快云 某些方面的使用
点击右上角的「创作中心」,下滑找到「博客设置」,然后就可以修改了。点击右上角的「个人中心」,下滑找到「个人简介」,然后点击「编辑」就可以修改了。建议大家想好了再改,因为一个月只能改五次。
2025-01-17 19:27:14
159
原创 C++ 卡常小技巧
建议大家还是老老实实地去写正解。所有方法均亲测有效。假设你正在写一道题,你只会写歪解,但是却超时了,你又不想看题解,怎么办呢?
2025-01-15 20:04:41
541
原创 单调栈总结
声明:文章同步发布于。顾名思义,单调栈就是栈内元素有序的栈。说实话,我挺佩服发明单调栈的这个人的,竟然能想到这么做。单调栈按照其数据存放的顺序分为和。我们手动模拟一个单调递减栈:初始时栈为空,总共添加个元素,分别为。现在来了一个元素,栈变为:。添加一个元素,所以栈变为。添加一个元素,栈变为。添加一个元素,栈变为。模拟结束。相信到了这里大家应该对单调栈有了初步的了解,但是它具体有什么用呢?1. 下一个更大(小)元素问题比如我们在。
2025-01-14 19:24:57
1049
原创 树状数组总结
声明:该文章同步发表于。从名字上来看,树状数组就是一个形状像树的数组。二叉树和树状数组结构对比图:可以发现树状数组虽然和二叉树结构相近,但是删除了一部分。为什么呢?再给出另一张结构图:可以发现,每一层中的第偶数个格子是无用的,第奇数个格子是有用的,这是因为,对于第层第个格子(),一定可以用第层第个格子减去第层第个格子得到。那么怎么求解呢?我们用维护一个树状数组。初始化:是不是挺麻烦的?没错!我们可以用前缀和计算,记为。得出结论:Q:函数是干什么的?
2025-01-13 21:01:05
745
原创 最短路大全
对于一张图,我们从一个图中挑出边生成一棵树,使得该树的边权之和最小。最小生成树可能不唯一,但其边的权重之和一定是唯一的。最短路径树(英文:Shortest Path Tree)),简称 SPT,就是从一张连通图中,选择一些边,满足从根节点到任意点的路径都为原图中根到任意点的最短路径的树(差不多就是最短路径吧)。
2025-01-13 19:34:10
1081
空空如也
请问诱导子图的定义是什么?
2025-01-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人