摘要: 数据在计算机中以二进制的形式保存,数据类型只是人为定义的一种解读位码的一种方式。先讨论整数之间的转换,对于长度相同的数据类型,相互转化时只是改变了解读的方式,但是并没有改变位值,比如int和unsigned int;将精度低的转为精度高的,比如short转为int,对符号进行拓展;高精度转为低精度, 阅读全文
posted @ 2020-10-09 17:44 太山多桢 阅读(129) 评论(0) 推荐(0) 编辑
摘要: RMQ(区间最值查询)问题有多种解法 ST表的主要功能就是处理RMQ问题。记录一个区间内的最大最小值,dp[i][j]表示,从i位置开始的2^j个数中的最大值。查询时将该区间分为两段,保证这两段覆盖查询范围即可 void init() { for(int j=0;(1<<j)<=n;j++){ fo 阅读全文
posted @ 2020-10-09 17:41 太山多桢 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 最近公共祖先是指对于一棵有根树T的两个节点u和v,它们的LCA(T,u,v)表示一个节点x,x是u,v的祖先且x的深度尽可能大。对于LCA问题有多种解法,Tarjan、倍增、RMQ、树剖等... 首先关注离线求解算法,也就是将询问都存储起来,处理完之后一次性回答所有询问。Tarjan算法+并查集可以 阅读全文
posted @ 2020-10-09 17:39 太山多桢 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 矩阵可以用二维数组或者vector数组来存储,但是vector数组的操作可能会有点慢,遇到TLE且矩阵大小比较固定的题目,及时转换到二维数组。至于快速幂的实现,与普通整数快速幂思想一样。一个简单例题POJ3734,用vector数组实现 #include<stdio.h> #include<vect 阅读全文
posted @ 2020-10-09 17:20 太山多桢 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 利用前缀和,可以很方便地求出指定区间内元素的和。关于这个已经是比较熟悉了,而且应用也比较多。树状数组核心就是利用前缀和。 差分的概念同前缀和类似,只不过是把求和操作转为了求差操作,而且细节上有所不同:当前项减去前一项,是当前项的差分。那么这样一来,对差分数组求和可以还原原数组。而且,如果要对原数组的 阅读全文
posted @ 2020-10-09 17:08 太山多桢 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 对于数学弱鸡来说,对于贪心题目的感知只有直觉和不断试错...所以题目记录也是也当重要的一部分。而且贪心的代码比较零碎,是真的烦 区间调度问题,每项工作需要一定时间,在给定时间内完成尽可能多的工作数量。贪心按照结束时间排序 字典序最小问题,POJ3617。对给定一个字符串,重新构造为一个新的字符串。每 阅读全文
posted @ 2020-10-09 17:02 太山多桢 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 给定一个点集,凸包是能够包围所有点的最小凸多边形。对于凸包,有以下的主要性质:1)所有顶点均在任何一条凸包边所在直线的一侧。如果逆时针遍历凸包的边,则对每条边,所有点均在其左侧。2)从任一点出发,沿逆时针前进总是向左转,沿顺时针前进总是向右转。 利用凸包的性质来求凸包。首先将点排序,优先按x排序再按 阅读全文
posted @ 2020-10-09 16:31 太山多桢 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 求三角形面积,海伦公式:S=sqrt(p*(p-a)*(p-b)*(p-c));S=(b*c*sina)/2 在几何中,double二元组可以表示顶点,表示向量,表示线段,表示直线。一般直接把二元组看成向量来计算。向量最重要的两个计算,点积和叉积具有不同几何意义。 点积,u*v=x1*x2+y1*y 阅读全文
posted @ 2020-10-09 16:28 太山多桢 阅读(555) 评论(0) 推荐(0) 编辑
摘要: 网络流最大流问题的难点还是在于对模型的转化:分析问题构造网络,然后用模板处理。 对于网络流,直观的理解就是在有向图中,每个边都有流量限制。求网络可允许的最大流量,就是最大流问题。求解最大流使用Dinic算法,网络构建好之后,每次bfs在残差网络上检查是否有残余的流可以到达终点,如果有增广路,再通过d 阅读全文
posted @ 2020-10-09 16:17 太山多桢 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 记录一些没有被之前博客记录的DP题型。可能是我见的题比较少,这部分并没有很多题... 洛谷P2051,标签是状压DP,但是用状压的话不太好写转移方程,需要大量的辅助数据。情况太复杂的情况下就可以换个思路了,本题可以通过分情况讨论来处理。 另外,对于求总的方案数这类型问题,总要为dp[0][0]这样的 阅读全文
posted @ 2020-10-09 16:07 太山多桢 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 区间DP:区间dp就是在区间上进行动态规划,求解一段区间上的最优解。主要是通过合并小区间的最优解进而得出整个大区间上最优解的dp算法。例题洛谷P1880、P2858、P1063,POJ1390、POJ2955、POJ3042、POJ1141(POJ的这几道比较难... 将大区间分割为小区间,dp[i 阅读全文
posted @ 2020-10-09 16:02 太山多桢 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 写在前面:动态规划与分治有一定的类似之处,都是将原问题分解成子问题解决。但是,动态分解得到的子问题往往不是独立的,子问题之间可能共享相同的子问题;而分治的子问题相互独立互不影响。动态规划常用于求最优解的问题。 解决动态规划问题的关键点在于确定状态量和状态转移方程,并选择合适的复杂度范围。状态量要能完 阅读全文
posted @ 2020-10-09 15:49 太山多桢 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 一般见于图论搜索的题目中。题目中提供了一些操作,每个点可以选择进行操作。由于操作次数的不同,会产生非常多的情况,如果考虑何时使用操作,情况会更多。如果将在图上求解最短路看成是在二维平面上进行的,引入进行操作的次数 k 做为第三维,那么这个三维空间就理应可以包含所有的情况,便可以在这个三维空间上解决问 阅读全文
posted @ 2020-10-09 15:25 太山多桢 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 通过单调栈,可以将一些题目从O(n2)降到O(n),不需要枚举,扫描一遍将之前的结果存到栈中,处理当前位置时从栈中获取之前的信息,并将当前位置存入栈中。典型模型是求最大矩阵:POJ2559 #include<stdio.h> #include<algorithm> using namespace s 阅读全文
posted @ 2020-10-09 15:22 太山多桢 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 反复推进区间的开头和末尾,来求取满足条件的最小区间的方法为尺取法。尺取法的名字来源于尺取虫,来回推进开头和末尾,逐步判断当前的区间:若区间不满足条件,则向前推进扩大区间;若区间满足条件,记录当前的解并推进末尾缩小区间。每个尺取的过程复杂度为O(n)。例题:POJ3061 需要注意的是,在模板中,当前 阅读全文
posted @ 2020-10-09 15:20 太山多桢 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 有的枚举问题超出了复杂度限制,直接进行枚举不可取,但是能够枚举一半的集合。将原问题分为两半分别枚举,再选择合适的方法进行来对两边枚举结果匹配,复杂度最多可以下降为原来的开平方。 例题POJ2785,将O(n4)降为O(n2*lgn)。其中lower_bound和upper_bound实现了以lgn的 阅读全文
posted @ 2020-10-09 15:19 太山多桢 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 这类型题目的特点是,要反转一个点的状态,会顺带反转周围一个范围内的状态,或者说是只能对一个范围进行反转。 针对这类题目,要把握的有两点: 1)每个区间最多也就是被反转一次,两次及其以上是没有意义的 2)分析每个点受几个区间影响或者是对几个区间产生影响,对当前点考虑反转时,优先满足已经走过的点(上一层 阅读全文
posted @ 2020-10-09 15:16 太山多桢 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 整理一些位运算的常用操作。基础知识点提醒: 1.~与-的不同含义。~是逐位取反,而-是算术运算取负。 2.>>右移运算,对于无符号数填充0;有符号数则填充当前符号 重要!运算符优先级的整理!涉及到位运算一定要考虑好优先级的问题,要不然会出现各种奇怪的问题功亏一篑。为保证正确性,建议严格使用括号 () 阅读全文
posted @ 2020-10-09 15:13 太山多桢 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 树状数组/线段树都可以把原来朴素的O(n2)变为O(n*logn),用于高效计算数列的前缀和。具体主要表现为3种情况:区间修改单点查询;单点修改区间查询;区间修改区间查询,这3种情况是一个递进关系,理解规律之后就比较好记。 树状数组的具体原理见https://www.cnblogs.com/xenn 阅读全文
posted @ 2020-10-09 15:03 太山多桢 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 二分不仅是简单的一个查找工具,而且是一种类型题目的解体思路。困在了一道题上:求最大值的最小(大概是这种类型......)遇到这种情况应该考虑二分查找。先将可能的最大值列出来,对该数列排序,在该数列上进行二分,判断当前节点是否合适,由此求出最大值的最小值。 例题洛谷P1182、P1642,这里以P16 阅读全文
posted @ 2020-10-09 14:57 太山多桢 阅读(127) 评论(0) 推荐(0) 编辑