- 博客(15)
- 收藏
- 关注
原创 KMP算法详解
KMP算法是一种高效的字符串匹配算法,通过预处理模式字符串生成部分匹配表(next数组),避免不必要的比较,将时间复杂度从O(mn)降低到O(m+n)。算法的核心思想是利用已匹配的信息,指导模式串的移动。预处理阶段构建next数组,记录每个位置的最长相同前缀后缀长度;匹配阶段则利用next数组进行快速匹配。KMP算法的时间复杂度为O(m+n),空间复杂度为O(m)。文章还提供了C++的string风格和char数组风格的代码实现,帮助读者更好地理解和应用该算法。
2025-05-23 11:43:13
898
原创 P7333 [JRKSJ R1] JFCA 题解
那么问题就转化为求区间极值的问题, 暴力求解区间极值会超时, 很容易想到。(右)为起点, 寻找一个最小的区间使区间极值。###代码示例(暴力)查找。问题可以简化为在位置。
2025-04-28 12:07:18
988
原创 迪杰斯特拉算法优先队列优化
迪杰斯特拉算法的每一轮, 都需要找一个未被访问且距离起点最近的点来进行操作, 这个寻找的过程需要遍历距离数组, 比较耗时;当我们每次更新一个点的距离时, 可以将当前点与距离组合成pair, 放入优先队列, 优先队列以距离排序, 使得队首为距离最小元素, 这样, 每次取出队首, 就可以知道距离起始点最近的点, 大大优化计算时间。
2025-03-26 14:20:52
190
原创 素数筛选: 埃氏筛与欧拉筛
举个🌰: 假定 num = 30, num 会被 2, 3, 5分别筛选一次, 相当于多做了两次筛选, 且 num 越大, 重复筛选的次数就越多。埃氏筛的原理: 唯一分解定理, 即一个合数, 必然能够分解为数个素数的乘积, 且这种分解的结果是唯一的。emmm, 但愿能看懂吧, 看不懂也没关系, 死记硬背就完事了, 奥利给。程序实现: 将范围内所有的素数的倍数都标记为合数, 剩余未标记的即为素数。埃氏筛选有一个问题: 同一个合数, 会被多个素数筛选掉。
2024-06-03 15:19:44
665
4
原创 题解: P1047 [NOIP2005 普及组] 校门外的树
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。输出一行一个整数,表示将这些树都移走后,马路上剩余的树木数量。我们可以把马路看成一个数轴,马路的一端在数轴。的马路上有一排树,每两棵相邻的树之间的间隔都是。第一行有两个整数,分别表示马路的长度。,表示一个区域的起始点和终止点的坐标。数轴上的每个整数点,即。
2023-12-12 18:09:07
1096
原创 并查集与哈希表
若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。行:每行两个数 Pi, Pj,询问 Pi 和 Pj 是否具有亲戚关系。表示第 i 个询问的答案为“具有”或“不具有”亲戚关系。
2023-11-01 00:58:03
70
原创 01背包与完全背包-python
物品重量 w = [3, 4, 5, 7]物品价值 v = [1, 5, 6, 9]物品数量 n = 4背包容量 c = 10。
2023-10-21 00:45:44
143
原创 13届蓝桥杯省赛-python:第10题孤岛问题
第⼀⾏输⼊两个正整数N和M,N表示矩阵⽅格的⾏,M表示矩阵⽅格的列,N和M之间以⼀个英⽂逗号隔开,第⼆⾏开始输⼊N⾏,每⾏M个数字 (数字只能为1或者0,1表示没被污染的海域,0表示已被污染的海域)有⼀⽚海域划分为N*M个⽅格,其中有些海域已被污染(⽤0表示),有些海域没被污染(⽤1表示)。块海域(绿⾊)没被污染,因为每⼀块的上下左右都被污染的海域包围。输出⼀个整数,表示N*M的海域中有⼏块是没被污染的独⽴海域。输⼊函数的括号中不允许添加任何信息。这块4*5的海域,有。
2023-08-05 17:42:10
440
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人