摘要: 题目来自C++语言程序设计(第四版) 作者郑莉 习题6-24 下面是代码基于char*的实现: /* * @Author: Hellcat * @Date: 2020-03-24 11:44:47 * This file is MyString.h */ // class with pointer 阅读全文
posted @ 2020-03-25 15:48 hellcat9 阅读(1224) 评论(0) 推荐(0) 编辑
摘要: (1) Composition(复合) 设计模式: have-a 以STL中的queue为例: queue依托于双端队列deque来实现, 用UML图可表示为: template <class T, class Sequence = deque<T> > class queue { ... prot 阅读全文
posted @ 2020-03-25 15:13 hellcat9 阅读(709) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定数列A以及M条指令 "1 x y" 查询[x, y]中的最大连续子段和 "2 x y"把A[x] 改成y 单点修改的操作不再赘述 对于维护最大连续子段和的思路如下: 先从二叉树的视角考虑一下线段树中所有的情况: tmax为最大连续子段和 最大前缀和为lmax 最大后缀和为rmax 1 阅读全文
posted @ 2020-03-10 16:15 hellcat9 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 二分图判定: 先由定理: 一张无向图是二分图, 当且仅当图中不存在奇数环. 证明如下: 由此可知, 如果要证明一张图是二分图, 可以采用两种颜色进行染色, 一个节点被标记后它的所有相邻节点应被标记为与之相反的颜色, 如果在标记过程中存在冲突则有奇数环的存在, 退出判定. 染色法可以用dfs实现. 以 阅读全文
posted @ 2020-03-08 12:04 hellcat9 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定一个整数序列 维护5种操作 次数<1e6 I x: 光标位置插入x 然后光标位于x之后 D: 删除光标前一个数 L: 光标左移 R: 光标右移 Q k: 询问位置k之前的最大前缀和 选用"对顶栈"的做法 大致示意图如下: 对顶栈stkl, stkr直接通过数组模拟即可实现 以I x的 阅读全文
posted @ 2020-02-27 20:45 hellcat9 阅读(210) 评论(0) 推荐(0) 编辑
摘要: Catalan数就是魔法 火车进出栈问题即: 一个栈(无穷大)的进栈序列为 1,2,3,4,...,n 求有多少个不同的出栈序列? 将问题进行抽象, 假设'+'代表进栈, 则有'-'代表出栈 那么如果进栈序列为123, 则: + + + - - - 将1, 2, 3压入栈后再将3, 2, 1弹出 得 阅读全文
posted @ 2020-02-27 17:59 hellcat9 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 由题给的xi, yi范围,可以建立二维地图maze[i][j],记录i j范围上的所有目标的价值总和 即有maze[xi][yi] += wi 然后接下来的目标就是求出该二维数组的前缀和 可得到前缀和计算的递推式: maze[i][j] += maze[i-1][j] + maze[i][j-1]- 阅读全文
posted @ 2020-02-24 12:51 hellcat9 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 方格有m*n个格子,一共有2^(m+n)种排列,很显然不能使用暴力法,因而选用动态规划求解. 求解DP问题一般有3步,即定义出一个状态 求出状态转移方程 再用算法实现.多数DP题难youguan点在于第2步,而在状态压缩DP中,定义状态也是很关键的一个步骤.有关位运算的基础知识,按位与,按位或,异或 阅读全文
posted @ 2020-02-24 10:17 hellcat9 阅读(174) 评论(0) 推荐(0) 编辑