C++
文章平均质量分 84
千裡
无
展开
-
tarjan求(强连通分量)缩点与拓扑DP求DAG最长路
http://acm.hdu.edu.cn/showproblem.php?pid=1269https://www.luogu.com.cn/problem/P3387原创 2020-04-08 12:57:59 · 252 阅读 · 0 评论 -
平衡树之splay树入门
目录splay(伸展)树的基本介绍简介数据结构核心操作pushuppushdownrotatesplaysplay树相关操作查找插入删除前驱和后驱第k个元素区间翻转例题splay(伸展)树的基本介绍简介splay树是BST的一种,其均摊复杂度是O(logN),1985年由Tarjan提出。对于单独的一步复杂度可能到达O(N)。其严格证明比较麻烦。splay树不仅提供了平衡二叉树的功能,还可以...原创 2020-04-07 13:37:58 · 640 阅读 · 0 评论 -
康托展开与逆康托展开
目录康托展开概念公式公式分析公式求解例题代码逆康托展开概念求解例题例题分析代码康托展开概念康托展开是为了解决某一个排列是全排列中的第几个的问题。比如:对于数组nums = [1,2,3](各不相同)它的全排列如下:123,132,213,231,312,321相当于,当前面几位都相同并且i<j时,第i个数字在第x位比第j个数字在第x位的序号要小。在该例中可以看成是组合成的排列数...原创 2020-04-05 15:31:33 · 149 阅读 · 0 评论 -
回文串,从O(n^3)暴力到O(n)的Manacher算法
问:求一个字符串的最长回文子串。目录解法一:暴力 O(n^3)解法二:区间dp O(n^2)解法三:中心拓展算法 O(n^2)解法四:Manacher算法 O(n^3)步骤第一步:字符串奇偶预处理第二步:扫描字符串,求解。复杂度分析Manacher模版模版使用方法总结解法一:暴力 O(n^3)显而易见的一个想法是暴力枚举字符串中任意两个端点,然后判断两个端点组成的字符串是不是回文串。该方法...原创 2020-04-02 12:39:01 · 323 阅读 · 0 评论 -
(受益匪浅的一场LC周赛)数位DP+KMP
今天学习了LC周赛最后一题是一道数位DP+KMP的题目5371. 找到所有好字符串,借此机会花了一下午学习了数位DP,写了几道洛谷和HDOJ上的题,算是基本了解了数位DP。然后又回头去补这道题目,最终疯狂WA,最后发现是我之前写KMP模版对next数组的第0位和第1位以及结果是0的位置没有初始化,在LC上设置为全局变量时会被上一次的NEXT数组覆盖。最后终于AC了。总结一下,数位DP就是计算从0...原创 2020-03-30 01:17:25 · 407 阅读 · 0 评论 -
C++_primer_plus阅读笔记
目录第1章 开始第2章 变量和基本类型第1章 开始输入运算符(>>)与输出运算符(<<)类似,接受一个istream作为其左侧运算对象,接受一个对象作为其右侧运算对象。输入与输出运算符返回其左侧运算对象作为其计算结果。因此下面两种写法等价.cin>>v1>>v2;(cin>>v1)>>v2;成员函数:成员函数是定义...原创 2020-03-22 02:43:49 · 477 阅读 · 0 评论 -
线段树,添加懒标记解决区间修改和区间查找的问题
总结写的很乱,可能只有自己看得懂ORZ区间修改区间查找例题1例题2写的很乱,可能只有自己看得懂ORZ对于区间修改,单点查找问题以及单点修改,区间查找问题使用树状数组可以在O(logN)的时间复杂度上很好解决,但是对于区间修改,区间查找时,就不好解决了。因此使用到了一种叫做线段数的数据结构,类似于堆(结点的编号为n,则左孩子编号为2n,右孩子的编号为2n+1)。原数组为A[1~10]。线段树的结...原创 2020-03-10 23:40:05 · 373 阅读 · 0 评论 -
树状数组原理以及模版
树状数组原码反码与补码定义举例lowbit运算树状数组介绍通过一个问题引入树状数组的定义解决引入的问题1. 设计一个函数getsum(x),返回前x个数组之和A[1]+A[2]+...+A[x]2. 设计一个函数update(x,v),实现将第x个数加上数字v。A[x]+=v;树状数组的其他应用原码反码与补码定义原码:最高位为符号位,正数为0,负数为1,剩余位表示数值的大小。反码:正数的...原创 2020-03-10 05:12:22 · 722 阅读 · 0 评论 -
算法与数据结构模版题
P5788 【模板】单调栈原创 2020-03-09 22:14:12 · 210 阅读 · 0 评论 -
Tria树(前缀树)与AC自动机
目录Tria树(前缀树)介绍数据结构插入,搜索,查找AC自动机Tria树(前缀树)介绍前缀树是一种用于插入查找搜索数据的数据结构,又叫做字典树。后缀树与其类似。和哈希表相比,前缀树不仅可以查找某一个键,也可以查找该键的前缀。并且查找速度只与所要查找的键的字符长度有关。数据结构一个只存储小写字母的tria树的数据结构如下:struct Trienode{ bool is_stri...原创 2020-03-07 00:23:23 · 691 阅读 · 0 评论 -
动态规划的背包问题
01背包问题题目:有n件物品,每件物品的重量为w[i],价值为c[i]。现有一个容量为V的背包,问如何选取物品放入背包,使得背包内物品的总价值最大。其中每种物品都只有1件。《算法笔记》样例:5 8 //n=5,V=83 5 1 2 2 //w[i]4 5 2 1 3 //c[i]如果暴力的话,复杂度是O(2^n),因此使用动态规划,复杂度为O(nV);令dp[i][j]表示:...原创 2020-02-20 03:45:08 · 435 阅读 · 0 评论 -
C++实现高精度大整数及其运算
目录高精度大整数头文件结构体通过字符数组赋值输出大整数大整数的比较大整数的运算大整数之间的加法大整数之间的减法高精度大整数与低精度的乘法高精度除以低精度数,同时返回r为余数其他运算使用示例例题1(贪心+大整数)题目AC代码高精度大整数对于一个数,如果其超过了0x7fffffff,则无法用int存储,如果超过2^63-1则long long也无法存储。因此构造结构体来存储这样的高精度大数。头文...原创 2020-03-05 18:23:27 · 2623 阅读 · 1 评论 -
刷题笔记
洛谷P1308 统计单词数string库为了读一行string 字符串,使用getline(cin,string)tolower() 把字符转小写toupper() 把字符转大写原创 2020-02-16 00:41:37 · 119 阅读 · 0 评论 -
中缀表达式转后缀表达式(逆波兰式)并且计算结果
原理省去,给出了思路和代码。思路:(1)中缀表达式转后缀表达式设一个运算符栈,用来临时存放操作符,一个队列,用来存放生成的后缀表达式。从左向右扫描中缀表达式,如果遇到操作数num:直接添加num到后缀表达式队列中。如果遇到的是运算符op1:如果该运算符op1比栈顶运算符优先级高,则把该操作符op1入栈。否则把栈顶的运算符弹出加入到后缀表达式队列中,直到当前栈顶的元素优先级小于op1......原创 2019-09-06 17:24:58 · 877 阅读 · 0 评论 -
C++中常用函数以及类型总结
记录在刷题过程中经常用到的,方便以后查询。vector(动态数组)需要头文件<vector>构造函数vector<int> nums; //构造数据元素类型为int的空动态数组vector<int> nums(size); //数据元素类型为int,个数为size的动态数组vector<int> nums(size,val); //数据...原创 2019-07-03 14:36:54 · 6339 阅读 · 3 评论 -
C++实现冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序
总结记录一下,C++实现各种排序算法,加深理解。参考《大话数据结构》原创 2019-07-07 19:31:50 · 950 阅读 · 0 评论