随笔分类 -  OJ/ACM系列

摘要:A*算法 A*算法是在图形平面中,对于有多个节点的路径求出最低通过成本的算法。其属于图遍历算法,算是对BFS算法基础上进行优化改进。其改进是在进行距离估计时,运用了启发式函数进行预估。 具体来说,对于通常的距离计算,假定起点为s,终点为t,从起点到点x的最短真实距离为g(x),x到终点的估计距离为h 阅读全文
posted @ 2022-04-16 00:07 zhanghanLeo 阅读(72) 评论(0) 推荐(0) 编辑
摘要:# Z函数及扩展KMP ## 1.0 Z函数定义及示例 首先Z函数是啥? 其定义为Z(i): 为s和s[i, n]的最长公共前缀(LCP)(这里假定字符序列都是从下标1开始,下文就不赘述)。 用更加形式一点的描述就是: Z(i) = max{x | s[1, x] = s[i, i + x -1]} 阅读全文
posted @ 2022-04-09 23:31 zhanghanLeo 阅读(254) 评论(0) 推荐(0) 编辑
摘要:你现在需要设计一个密码 S,S 需要满足: S 的长度是 N; S 只包含小写英文字母; S 不包含子串 T; 例如:abc 和 abcde 是 abcde 的子串,abd 不是 abcde 的子串。 请问共有多少种不同的密码满足要求? 由于答案会非常大,请输出答案模 109+7 的余数。 输入格式 阅读全文
posted @ 2022-03-16 23:31 zhanghanLeo 阅读(49) 评论(0) 推荐(0) 编辑
摘要:能量石这个问题,一方面是分析出贪心所得强性质。 另一方面是状态定义时,恰好和至多的区别。 当恰好时,最后求得结果需要遍历。 对于定义为至多时,因为后面价值无法保证在状态转移时保证,单点递增顺序。仍旧需要遍历一次得到结果。 是个很不错的综合题目。 【ACwing734】 岩石怪物杜达生活在魔法森林中, 阅读全文
posted @ 2022-03-13 16:34 zhanghanLeo 阅读(37) 评论(0) 推荐(0) 编辑
摘要:树的重心 定义: 重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。 不妨设max_part(x)为在删除节点x后产生的子树中,最大的一颗大小。那么树的重心就是使得max_part函数取到最小的节点p就是整颗树的重心。 void dfs(int 阅读全文
posted @ 2021-10-22 01:02 zhanghanLeo 阅读(62) 评论(0) 推荐(0) 编辑
摘要:线段树 1.线段树的建树 build函数: build(u, l, r):u表示当前节点编号,l、r分别是该节点所代表区间的左右端点[l, r]. struct SegmentTree{ int l, r; int dat; }t[SIZE * 4]; void build(int u, int L 阅读全文
posted @ 2021-09-28 00:32 zhanghanLeo 阅读(38) 评论(0) 推荐(0) 编辑
摘要:多源BFS 对于一般的BFS,其只有单源的入口节点,然后按照BFS套路,从而求出最短路之类的问题。 下面介绍的是对于含有多个入口节点,且需要求最短路径之类的问题。 样题模型 [ACWing 173] 给定一个 N 行 M 列的 01 矩阵 A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义 阅读全文
posted @ 2021-09-21 16:09 zhanghanLeo 阅读(628) 评论(0) 推荐(0) 编辑
摘要:质因数分解 首先引入定理: 对于任何一个大于1的正正整数都可以分解为有限个质数的的乘积,可记作: N=p1C1p2C2...pmCm 其中Ci都是正整数,pi都是质数,且满足 p1<p2<...<pm 一般在做题时,采用试除 阅读全文
posted @ 2021-09-19 16:34 zhanghanLeo 阅读(533) 评论(0) 推荐(0) 编辑
摘要:动态规划系列 背包问题 背包问题是个非常经典的问题,但是其变种非常之多,也非常灵活。 这里结合算法进阶的知识点和ACwing的题目,一起学习和练习相关知识点。 1. 0-1背包问题 问题描述: 给定N个物品,其中第i个物品的体积为Vi,价值为Wi。有一容积为M的背包,要求选择一些物品放入 阅读全文
posted @ 2021-08-01 18:04 zhanghanLeo 阅读(144) 评论(0) 推荐(0) 编辑
摘要:单调栈 1.0 原始模型 描述:给定一个序列,求出序列每个位置在左侧距离其最近的,且比起小的数,如果不存在则返回-1,存在则返回其值, 最后输出该结果。 解析: 首先考虑对该题目的朴素解(暴力解法),挖掘一些性质,把求解空间进一步缩小,从而降低问题的求解时间复杂度。 1. 暴力做法 双重循环:第一重 阅读全文
posted @ 2021-07-13 00:24 zhanghanLeo 阅读(68) 评论(0) 推荐(0) 编辑
摘要:AC自动机总结 问题引入 在网上过滤一些不干净的内容,当用户输入的一段文字内容之后,通过字符串匹配算法查找用户输入的文本中是否存在敏感词。 因为网上流量大,用户多,如果用KMP算法来匹配,则需要对每个模式串进行逐一匹配,则可能需要O((n+m)k),这样效率并不是很高。那么有没有更高效的方式 阅读全文
posted @ 2020-12-10 23:10 zhanghanLeo 阅读(67) 评论(0) 推荐(0) 编辑
摘要:KMP算法 KMP算法应用场景 主要是文本串和模式串之间的匹配,来加速匹配的算法。 即在线性时间内求出文本串T中查找字符串P,且求出P在T中出现的次数和位置。 朴素的字符串匹配算法 主要是枚举文本串T的每个起始位置i, 然后逐步和字符串P进行比较,如果中途失配,那么i++, 在重新与P进行匹配; / 阅读全文
posted @ 2020-12-08 00:17 zhanghanLeo 阅读(187) 评论(0) 推荐(0) 编辑
摘要:Splay树 节点维护信息 rt tot fa[i] chi val[i] cnt[i] size[i] 根节点编号 节点个数 父亲 左右儿子编号 节点权值 权值出现次数 子树大小 操作 基本操作 maintain(x):在改变节点位置后,将节点x的size更新; get(x):判断节点x是父亲节点 阅读全文
posted @ 2020-07-24 00:51 zhanghanLeo 阅读(183) 评论(0) 推荐(0) 编辑
摘要:class Solution { public: int ladderLength(string beginWord, string endWord, vector<string>& wordList) { return DBFS(beginWord, endWord, wordList); // 阅读全文
posted @ 2020-07-10 00:24 zhanghanLeo 阅读(123) 评论(1) 推荐(0) 编辑
摘要:POJ1915,这题没啥好说的,rush就完事; #include <iostream> #include <queue> #include <cstdio> #include <cstring> using namespace std; typedef struct { int x, y; int 阅读全文
posted @ 2020-06-29 00:37 zhanghanLeo 阅读(94) 评论(0) 推荐(0) 编辑
摘要:#八数码问题和状态图搜索 八数码问题 BFS我们很熟悉,一般来说在leetcode上多是value类型,其实其处理对象也可以是状态。下面一起来看看八数码问题: 在一个3x3的棋盘上放置1~8的8个方块,每个占一个格,另外剩余一个空闲的格。与空格相邻的数字方块可以移动到空格中。 任务 任务1:指定初始 阅读全文
posted @ 2020-06-16 01:09 zhanghanLeo 阅读(488) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示