自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 【贪心好题】P2168 [NOI2015] 荷马史诗

贪心是发现子问题之间的共性,从而用同一个决策方式处理所有子问题,优化了枚举。动态规划是通过记录重叠子问题,从而减少枚举中对子问题的重复求解。贪心和动态规划都是优化了的枚举,贪心通过发现问题特性优化,动态规划通过去掉冗余枚举优化。给定n个单词的出现频率,用k进制串 si 替换第 i 个单词,要求任意的 1 ≤ i,j ≤ n,i ≠ j,都有si不是sj的前缀。求满足限制条件的重新编码之后的《荷马史诗》的最短总长度,以及最短总长度下的最长si的最短长度。《荷马史诗》共有n个单词。

2026-03-22 17:22:56 209

原创 【好题】ABC 449 F - Grid Clipping

入手点:直接计算h × w规模的全白矩形个数不可行,因为必须已知当前网格,时间复杂度起码为O(HW)。正难则反,黑色格子只有10^5个,而且计算没有黑色格子情况下的全白矩形个数用乘法原理计算即可,考虑补集转化,从黑色格子入手。考虑一个黑色格子影响的全白矩形个数:确定全白矩形起点,就能确定这个全白矩形,所以只考虑全白矩形起点即可,如下图,如此不能直接累加答案,此问题明显是求矩形的面积并,用扫描线。如此整个问题,拆成了两个问题分别求解,之后合并答案。

2026-03-17 19:14:13 67

原创 题解 P1119 灾后重建(Floyd多源最短路),附 Floyd 本质

要理解每个算法的本质,根据问题的性质选择有这一特性的算法,不一定是直接运用这个算法,可能需稍加改动,这就非常需要深刻理解算法本质。ti 序列和 t 序列就算不满足单调不减,也可排序之后使其满足,转化成这个问题。每个解决的问题,都可作为工具,下次遇到问题可以通过转化变成已知的问题,算法本身就是已解决的问题,每次做题选择算法就是将未知转化成已知。

2025-11-04 17:52:22 954

原创 哈希表基础题(1)

哈希函数又称散列函数,目的是根据键得出键对应的值应该放在内存中的具体位置,根据不同的场景,具体方法有取余、看成一种进制而计算成整数等。两个不同的键通过哈希函数计算出的内存位置相同,就发生了哈希冲突,此时某些键不再唯一对应一个值,解决哈希冲突的方法是对发生冲突的键重新分配内存位置,具体方法有拉链法、闭散列法。

2025-10-27 18:17:22 658

原创 P6374 「StOI-1」树上询问(倍增+LCA)

一开始看到这道题没什么思路,一般没什么思路的题需要通过找规律得出答案,可以根据比较小的样例来找规律,首先画出样例,再根据结果和数据的关系发现规律,有的时候直接按规律实现很费劲,那么就需要洞察到等价于规律的易于实现的求解内容。本篇博客省略了找规律的过程,而是直接说明规律,接着找到等价于规律的易于实现的求解内容。分解问题搞清楚每步要求什么,注意要尽量适配算法。用有这样特性的算法求得解。

2025-10-03 23:40:17 774

原创 洛谷 P2245 星际导航(kruskal 重构树 + 倍增优化求路径最大边权)

洛谷上是蓝题,我觉得这道题挺简单的,一眼就看穿了,应该是绿题。kruskal 重构树 + 倍增优化求路径最大边权。

2025-09-13 00:11:03 287

原创 洛谷 P2680 [NOIP 2015 提高组] 运输计划(二分答案 + 树上差分)

每次思考要求什么,确定要求什么后,用算法实现,遇到卡时间或空间,就换个角度思考,或者通过某些算法或数据结构优化暴力。如此逐步求出问题的解。很经典,突破口藏的很深,求最小值这里,是问题切入点,想到用二分答案,然后思考怎么写 f_check 函数。是树上问题,本质是求所有路径里的最长路径的最小值,可以进行的操作是将某条边的边权设为0。判定目标:最长路径的长度是否可能<= mid。求最大值的最小值,可用二分答案。二分答案+树上差分。思考怎么写判定函数,

2025-09-11 17:40:17 318

原创 洛谷 P1967 [NOIP 2013 提高组] 货车运输(kruskal 重构树 + 求路径最小边权)

只考虑和结果有关的部分,是此题的突破点,也是重要的思维方式。

2025-09-11 17:34:18 362

原创 贪吃蛇大作战游戏总结

今天休息,玩了一会儿贪吃蛇,发现了成为蛇王的方法。关键是保持活着,抓住在特定时机的机会,其他顺其自然。一直活着一定能保证蛇的长度,成为蛇王。

2025-08-01 16:06:32 855

原创 倍增算法与应用(倍增优化之ST表、LCA、功能图、树上差分、贪心、二分)

倍增是一种算法思想,为了优化时间复杂度。本质是利用指数爆炸,将原问题抽象出来的非负整数分解为2的幂次的和,每个2的幂次长度的是一个子问题,最后合并子问题得到原问题的解,还是划分子问题。使时间复杂度从 O(n) 降成 O(log n)。倍增算法基于定理“任何整数都可唯一分解成k的幂次和”,即(n, m, a,k该定理是倍增算法能够正确应用的依据,也是k进制计数的基础。给定一段区间a,查询区间a的子区间[L, R]的最大值或最小值,就是RMQ问题。LCA即在有根树上求节点u和v的最近公共祖先。

2025-07-22 16:44:23 826

原创 【好题】洛谷 P1600 [NOIP 2016 提高组] 天天爱跑步(倍增LCA+桶)

没做出来,看了很多篇题解后AC了,感觉大部分题解讲得不清楚。

2025-07-21 21:17:31 981

原创 博弈论之公平组合游戏理论

感觉很多博弈论的资料没有写清楚为什么公平组合游戏要这样解决,为什么需要SG函数,为什么在Nim博弈里,求先手是否胜利是将每堆石子的石子数异或起来,为什么Bush博弈是找规律不用异或,Nim博弈需要异或。我尝试在这篇文章中把这些写清楚。多名玩家玩一个游戏,每个玩家都采取最优策略,均无失误,这类问题就是博弈论。即SG(x)函数为状态x(x是当前状态和决策有关的重要因素)能转到0~k - 1即k个连续的状态。可描述成状态x是k阶(0阶必胜态是必败态)必胜态。

2025-07-17 15:45:49 1000

原创 我出的两道题

汪队计划前往噜噜家做客。两人均居住在风景宜人的 Z 市,该市包含 ​​n 条单向道路​​(编号 1 至 n) 和 ​​m 户人家​​(编号 1 至 m)。每条道路从起点可通向其他道路或某户人家。汪队拥有 ​​h 个住所​​(包含在 m 户人家中),访问可从任意一个家出发。汪队携带一个​​加速器​​,最多使用 a 次。每次使用可将​​当前道路通行时间​​或​​打招呼时间​​缩短至原时间的 b%(即乘以 b/100)。请您求从任意汪队家出发,到达噜噜家(编号 L) 的​​次短耗时路径​​。

2025-07-11 15:46:16 1000

原创 排列组合初步

较为复杂的排列组合问题,分步求解,每一步将原问题拆解成子问题,根据子问题间的关系选择用加法原理还是乘法原理。排列组合的关键是拆解子问题。%5Csum。

2025-07-01 19:47:39 1230

原创 CCF 2025年6月 C++ GESP 七级

划分子问题是很多算法的核心思想,大问题求解起来复杂,划分成结构相似的子问题直到不能再划分,不能再划分的问题是易解的,再将子问题合并或推导出大问题的解,这么做的本质是为了简化问题求解的过程。子问题结构相似使得能用同一方法求解,可重复,适合计算机。

2025-06-30 20:33:22 861

原创 重要的城市(图论 最短路)

1.多源最短路且边权不等,且O(n^3)不会TLE,用Floyd。2.转化为二进制可减少空间和时间,若数据范围太大不能用整数表示,可用bitset。

2025-06-12 16:32:28 528

原创 GESP 七级 实操题

时间:O(n)求解,不能for循环嵌套。方法一:用二进制位表示质数的情况(ai ≤ 30,30以内的质数有10个),考虑一个非完全平方数和多少相乘变成完全平方数。

2025-06-12 15:46:09 528

原创 2025年5月月赛 乙组T1~T3

本文摘要: 本文介绍了三个编程竞赛题目及其解法: T1逆序对数:使用归并排序标记排列中的逆序对,计算满足条件的子序列。 T2平衡01串:采用二分答案和双指针法,在O(nlogn)时间内找到最小权重平衡方案。 T3城市漫步:通过DFS遍历树结构,动态计算最优路径,利用贪心算法减少不必要的边遍历。 解题关键点包括:善用二分查找和双指针等优化算法效率;对于图论问题考虑点若不合适,尝试边;合理运用DFS和贪心策略简化复杂问题。双指针代码实现中需注意边界条件和指针偏移量处理。

2025-06-05 19:22:58 968

原创 实数域上的二分

本文介绍了实数域二分法的应用技巧。首先说明实数二分需设置合理精度(eps=10^-(k+2)),通过示例演示如何用二分法求函数零点。其次提出将小数问题转化为整数处理的方法,如P1577切绳子问题。最后讲解多解情况下的处理策略,如在指定区间内寻找一元三次方程的所有实根,需要注意避免重复输出解的情况。文章通过多个代码示例展示了实数域二分法的具体实现方式,包括精度控制、整数转换和多解查找等关键技巧。

2025-06-05 15:59:05 487

原创 三分算法与DeepSeek辅助证明是单峰函数

本文介绍了三分算法及其在单峰/单谷函数极值查找中的应用。三分法通过两个中间点(mid1、mid2)逐步缩小区间。文章以洛谷P3382为例展示了三分法的实现代码,并详细解析了三分的运作原理。对于更复杂的问题如洛谷P2571传送带问题,提出了三分套三分的方法,通过数学证明确认了函数单峰性质后,采用嵌套三分分别求解最优路径点。文中强调数学分析的重要性,并建议善用AI工具辅助解决问题。代码实现时需注意坐标对应关系,确保计算点在正确线段上。

2025-06-05 14:14:47 912

原创 二分查找和二分答案(基础)

本文介绍了二分查找与二分答案的应用方法。二分查找适用于有序区间,通过对比中间值缩小查找范围,时间复杂度O(logn)。文章以洛谷题目为例,展示了二分查找在解决数组查找问题时的优化效果。二分答案则用于解决最优解问题,通过二分猜测最优解并用判定函数验证其可行性。文中详细讲解了二分答案的解题思路,包括最优解的确定、二分框架的构建以及判定函数的设计,并以分配问题为例说明了具体实现。文章强调,二分算法能够显著提升解题效率,但要求问题具有单调性且判定函数能在O(n)时间内完成验证。

2025-06-03 22:27:57 1171

原创 动态规划基础

摘要:动态规划是一种解决多阶段决策优化问题的算法,其核心在于划分阶段、定义状态、确定决策、建立状态转移方程、设定边界条件和明确目标解。适用条件包括最优子结构、重叠子问题和无后效性。实现时需注意遍历顺序和空间优化。通过核电站、最长上升子序列、公共子序列和糖果等例题展示了动态规划的应用,包括状态定义修改、初始化处理和最优解追踪等技巧。

2025-05-30 21:13:55 964

原创 洛谷 P10110 [GESP202312 七级] 商品交易

关键是建图以及列数学式发现规律状态转换型建图,把物品是点,将两个能转换的物品间建一条有向边,边权为费用+1(含手续费)。图由点和边组成,建图的关键是确定点和边。求a到b的最短路径。有负权,dijkstra不适用,只能用SPFA,最坏情况O(nm),超时,拼了,搏一把,居然过了??只能说数据太水,正式比赛肯定会噶。

2025-05-26 20:58:05 405

原创 洛谷 P10111 [GESP202312 七级] 纸牌游戏

dp状态极好想,代码实现有点儿绕。需简化代码,i=0或j=0的情况易出错,需注意j的循环范围,及dp[i-1](当前为dp[i])的i-1是否大于j,若不是则不可转移。简化代码一会儿提交。

2025-05-26 20:54:52 184

原创 洛谷 P10378 [GESP202403 七级] 交流问题

u、v为节点,u、v间建一条无向边,状态转换型建图,表达关系。u、v不在一个集合(一个学校),即相邻节点不在一个集合,要区分开,那么相邻节点染成不同颜色,只有两个集合,只染两种颜色,同时记录每种颜色的数量。注意不是连通图!所以记录数组是二维的,要for+dfs。最后求最小值,最大值,不一定res记录的是同一个颜色的数量,染色只是为了区分。会不会出现,一个节点要染两种颜色?不可能,只有环的情况才会一个节点染两种颜色,u和v不在同一个集合。

2025-05-26 20:53:12 313

原创 洛谷 P10379 [GESP202403 七级] 俄罗斯方块

先求每个连通块,在看当前连通块有无出现过(与颜色无关),判断是不是新的种类。关键是标记是否出现过,判断两个连通块是否一个种类,看连通块的形状是否相同。连通块形状从dfs角度看,即从相对连通块同一起始位置出发,走的方向相同,dfs时用str记录当前走的方向(若要回退str+=' '这么做避免误判),查ump str状态若为false,res++,同时标记str为true。掌握标记方法。

2025-05-26 20:49:40 232

原创 洛谷 P11965 [GESP202503 七级] 等价消除

枚举所有[L,R](L <= R),用位运算^(状压dp思想)计算[L,R],看是否为0即可。时间复杂度:O(n^2),超时。

2025-05-26 20:46:39 468

原创 连通性与tarjan 航班请求

这道题整体是一个贪心。做了这道题重新清晰的认识了有向图的结构。更加深刻的理解了拓扑排序以及什么时候该用tarjan算法。在代码提交错误的时候,先看是不是笔误导致的代码错误,确定了不是笔误导致的再去考虑调整思路。

2025-04-26 19:48:29 318

原创 突破for循环极限 洛谷 B4069 [GESP202412 四级] 字符排序

小杨有 n 个仅包含小写字母的字符串 s1,s2,……,sn,小杨想将这些字符串按一定顺序排列后拼接到一起构成字符串 t。小杨希望最后构成的字符串 t 满足:假设 ti 为字符串 t 的第 i 个字符,对于所有的 j < i 均有 tj

2024-12-30 21:51:21 1053

原创 动态规划篇 代码随想录算法训练营day44 | 力扣1143. 最长公共子序列、力扣1035. 不相交的线、力扣53. 最大子数组和、力扣392. 判断子序列

动态规划是很重要的算法思想,动态规划非常灵活,不能用背模板的方式解题。动态规划的性质有最优子结构(该问题能被分解为多个解法类似的子问题,解决每个问题都是求最值)、重叠子问题(有的子问题会被重复计算)、无后效性(当下的推导或答案和未来无关)。状态的定义非常重要,定义的状态必须符合动态规划的性质。定义了状态,通过模拟发现规律即可得到递推公式(状态转移方程)。状态和递推公式都明确了,剩下的就是实现。实现包括初始化和遍历顺序。

2024-12-13 23:49:12 624 1

原创 开发商购买土地

然而,由于城市规划的限制,只允许将区域按横向或纵向划分成两个子区域,而且每个子区域都必须包含一个或多个区块。为了确保公平竞争,你需要找到一种分配方式,使得 A 公司和 B 公司各自的子区域内的土地总价值之差最小。在一个城市区域内,被划分成了n * m个连续的区块,每个区块都拥有不同的权值,代表着其土地价值。目前,有两家开发公司,A 公司和 B 公司,希望购买这个城市区域的土地。现在,需要将这个城市区域的所有区块分配给 A 公司和 B 公司。请输出一个整数,代表两个子区域内土地总价值之间的最小差距。

2024-11-22 16:35:10 263

原创 区间和 解析

第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。随后的输入为需要计算总和的区间下标:a,b (b > = a),直至文件结束。给定一个整数数组 Array,请计算该数组在每个指定区间内元素的总和。前缀和数组下标从1开始比从0开始方便,因为不用特判。这道题只需要前缀和数组,不用保留原数组。输出每个指定区间内元素的总和。方法一:前缀和起始下标位0。方法二:前缀和起始下标为1。

2024-11-20 18:34:02 254

原创 day003~day004 解析

第 i 条灌溉记录有两个数据 Pi 和 Xi ,代表为位于 Pi 位置的植物,灌溉了 Xi 毫升的水。农场的有一个用于科学研究的大棚,大棚内有一条笔直的直线,直线的每个整数位置上都种植了一株科研植物,整数位置的范围为 [0,1e9]。对于 100 的数据,1≤N,M≤1e5,0≤P≤1e9,1≤X≤1e4,0≤L≤R≤1e9;大棚内设有一个自动灌溉机,会根据各植物检测到的特征数据,对特定位置的植物进行灌溉。输出 M 行,每行一个整数,代表每次询问的结果。请编程计算出 M 次询问,每次的询问结果。

2024-11-17 13:30:44 220

原创 代码随想录算法训练营day16 | 力扣513.找树左下角的值、力扣112. 路径总和、力扣106.从中序与后序遍历序列构造二叉树

记录深度depth,每到depth比dp值更大时,说明遍历到更下一层,此时更新res的值。因为是先左后右遍历,每层先遍历的一定是最左边的结点。方法一和方法二思路相同,都是根据“因为是先左后右遍历,每层先遍历的一定是最左边的结点”这种特性而来,实现不同。如下代码在结点值不重复的情况可以,结点值重复,会导致for循环查找中结点下标有二义性。求路径问题只能用前序,两种方法都是前序,只是每次递归cnt的处理不同。注意区间定义,区间定义永远不变,这里用左闭右开区间。一定要明确左下角结点的定义。

2024-11-15 21:04:53 281

原创 day003~day004的题目

小数学家艾米丽在数字王国中发现了一个有趣的任务:找出所有隐藏在特定范围内是奇数的对称数。给定两个三位正整数 L 和 R,请列出所有在 L 和 R 之间(包括 L 和 R)有多少个奇数对称数(如果没有这样的奇数对称数,则输出0)。这些数字在正向和反向读取时数字序列是相同的,它们被认为是数字王国的宝藏。农场的有一个用于科学研究的大棚,大棚内有一条笔直的直线,直线的每个整数位置上都种植了一株科研植物,整数位置的范围为。大棚内设有一个自动灌溉机,会根据各植物检测到的特征数据,对特定位置的植物进行灌溉。

2024-11-15 13:46:46 409

原创 2025 day001

婷婷很喜欢吃糖葫芦,总的糖葫芦的甜度到达n,她会很开心。给出一串糖葫芦串,糖葫芦串中有m个糖葫芦,婷婷不需要把这串糖葫芦串全部吃完,她可以选择性的吃,只要最终吃的糖葫芦的总甜度到达n(超过n也可以)就行,但她选择的糖葫芦必须相邻。n是两位数或者是三位数,用while循环法可解决所有数的分离问题,但时间不如解法二优化,解法二是先判断有是两位数还是是三位数,再分离。如果n是两位数,那么n的范围10<=n<=99,如果n是三位数,那么n的范围100<=n<=999。输出:输出最少可以吃几个糖葫芦,输出的是整数。

2024-11-14 18:43:18 370

原创 代码随想录算法训练营day10 | 力扣232.用栈实现队列、力扣225. 用队列实现栈、力扣20. 有效的括号、力扣1047. 删除字符串中的所有相邻重复项

STL里的栈(stack)与队列(queue)都是容器适配器,容器适配器是在某某容器的基础上再封装一层。可以指定stack(或queue)是以某某容器为基础,但该容器必须能够支持stack(或queue)里的所有操作。

2024-11-09 21:13:30 264

原创 代码随想录算法训练营day9 | 力扣151.翻转字符串里的单词、卡码网55. 右旋字符串、力扣28. 实现 strStr()、力扣459.重复的子字符串

字符串的操作一定要注意边界条件。

2024-11-08 20:37:15 435

原创 代码随想录算法训练营day8 | 力扣344. 反转字符串、力扣541. 反转字符串II、卡码网54. 替换数字

用双指针法,left指向头,right指向尾,每次遍历,交换nums[left]和nums[right]。将反转字符串的操作写成自定义函数,需要反转的时候调用该函数。或者直接用STL的reverse()。自定义的直接传递int类型的值,reverse()需要传递字符串的迭代器。用while循环和用for循环只是形式上不同,遍历方式以及边界控制相同。方法三:while循环,用自定义反转字符串函数。方法二:for循环,用自定义反转字符串函数。方法一:直接用STL的reverse()用双指针法,倒着遍历。

2024-11-07 18:28:07 342

原创 代码随想录算法训练营day7 | 力扣454 四数相加II、力扣383 赎金信、力扣15 三数之和、力扣18 四数之和

选择哈希结构:1.范围小,值分布密集,用数组,数组比set和map效率高。2.只查找一个值,值的范围大,值分布稀疏,用set(这里的set指multiset、set、unordered_set)。3.map可理解为下标不连续的数组(用的时候这么理解,map的实现是树或哈希),用map时,把要查找的值设为key,目标值设为value,这里的map指map、multimap、unordered_map。

2024-11-06 17:57:42 416

空空如也

空空如也

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

TA关注的人

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