摘要: 定义 改进字符串的匹配算法 关键:通过实现一个包含了模式串的局部匹配信息的next()函数,利用匹配失败的信息,减少匹配次数。 1.BF算法 暴力匹配 给定 文本串S “BBC ABCDAB ABCDABCDABDE” 存储为 s[i] 和模式串 P “ABCDABD” 存储为p[j] 进行匹配 思 阅读全文
posted @ 2020-08-12 18:48 Young-children 阅读(419) 评论(0) 推荐(0) 编辑
摘要: 定义:n个元素的有限序列 ,记为(a1,a2,a3,...,an) 特点:存在唯一表头表尾。除了表头,每个元素只有一个直接前驱。除了表尾,每个元素只有一个直接后驱。 存储结构 1 顺序存储 地址连续的存储单元,依次存储表中数据元素。使得逻辑相邻的元素,物理位置上也相邻 优点: 随机存取表中元素。 l 阅读全文
posted @ 2020-07-30 17:41 Young-children 阅读(530) 评论(0) 推荐(0) 编辑
摘要: DFS序: 每个节点在dfs遍历中进出栈的时间序列 将树形结构转化为线性结构,用dfs遍历一遍这棵树,进入到x节点有一个in时间戳,递归退出时有一个out时间戳, x节点的两个时间戳之间遍历到的点,就是根为x的子树的所有节点。 dfs序就是A-B-D-D-E-G-G-E-B-C-F-H-H-F-C- 阅读全文
posted @ 2019-12-02 22:02 Young-children 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 倍增的思是二进制,二进制需要进行位运算 首先开一个n×logn的数组,比如fa[n][logn],其中fa[i][j]表示i节点的第2^j个父亲是谁。 然后,我们会发现有这么一个性质: fa[i][j]=fa [fa[i][j-1]] [j-1] 用文字叙述为:i的第2^j个父亲 是 i的第2^(j 阅读全文
posted @ 2019-12-02 21:41 Young-children 阅读(443) 评论(0) 推荐(0) 编辑
摘要: 网络流未处理文件的代码: /*656.网络流-矩阵计算 (10分) C时间限制:3000?毫秒?|? C内存限制:3000?Kb 题目内容: 有一个n行m列的整数矩阵A, 知道每行的和以及每列的和,还知道一些矩阵元素的约束如A[i][j]<x, 或者A[i][j]>y等, 判断该是否存在满足上述条件 阅读全文
posted @ 2019-11-20 19:44 Young-children 阅读(496) 评论(0) 推荐(1) 编辑
摘要: 单点更新 区间查询 敌兵布阵 坑点:cin cout 一直超时 改成 scanf 和printf 就过了 /*输入 t样例 N(N<=50000) 第i个正整数ai代表第i个工兵营地里开始时有ai个人(1<=ai<=50)。 接下来每行有一条命令,命令有4种形式: (1) Add i j,i和j为正 阅读全文
posted @ 2019-11-03 16:55 Young-children 阅读(522) 评论(0) 推荐(0) 编辑
摘要: 逆序对的定义: 在一个数列aa中,满足a[i]>a[j]a[i]>a[j]并且i<ji<j的数对就叫做逆序对。 解法: 一般有两种解法:归并排序和树状数组。 归并排序动图: 归并求逆序对: 归并排序用到了二分的思想,在排序过程中如果a[i]<=a[j] 就不会产生逆序对,如果a[i]>a[j]就会产 阅读全文
posted @ 2019-11-03 16:50 Young-children 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 主席树是 以前缀和形式基于权值线段树建立的可持久化线段树,可持久化指的是它保存了这棵树的所有历史版本. 最简单的办法是:如果你输入了n个数,那么每输入一个数字a[i],就构造一棵保存了从a[1]到a[i]的权值线段树,由于只增加了logn的节点数,我们增加改变的节点并将没有改变的子树指向该节点,这样 阅读全文
posted @ 2019-11-03 16:12 Young-children 阅读(605) 评论(0) 推荐(0) 编辑
摘要: 定义: 权值线段树,基于普通线段树,但是不同。 举个栗子:对于一个给定的数组,普通线段树可以维护某个子数组中数的和,而权值线段树可以维护某个区间内数组元素出现的次数。 在实现上,由于值域范围通常较大,权值线段树会采用离散化或动态开点的策略优化空间。单次操作时间复杂度o(logn) 权值线段树的节点用 阅读全文
posted @ 2019-11-03 15:51 Young-children 阅读(7653) 评论(3) 推荐(4) 编辑
摘要: 今天,在网上看见有网友在问什么是离线操作,什么是在线操作。 离线操作:读入所有的操作数据,然后一次性处理。 在线操作:每读入一个操作数据,就进行一次操作。 值得注意的是两者并不等价,有的时候,离线操作要比在线操作要快。 但是,离线操作的缺点也非常明显。那就是要占用一些额外的空间。 线段树可以动态开点 阅读全文
posted @ 2019-11-03 14:49 Young-children 阅读(1138) 评论(0) 推荐(0) 编辑