
Algorithm_二分
niuox
这个作者很懒,什么都没留下…
展开
-
有关二分法的一点思考
前几天看到一个学习算法的资源。。其中讲到二分法,提到了用二分搜索技术查找已经排好序的N个元素中的某个元素。。本身是很简单的。但是后面有一个思考题,提到如何使用二分法求a的n次方。但没有给出答案。我想了一会儿,不会。但是又想了一会儿,突然有思路了。二分法其实是一种分治的思想,分而治之。。找到他们最小部分的共同点。普通求a的n次方的方法,最简单的莫过于:int power(int a,原创 2012-02-01 18:46:45 · 2459 阅读 · 3 评论 -
STL源码学习----lower_bound和upper_bound算法
STL源码学习----lower_bound和upper_bound算法 STL中的每个算法都非常精妙,接下来的几天我想集中学习一下STL中的算法。 ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置转载 2013-02-27 19:52:38 · 757 阅读 · 0 评论 -
Hoj 2608 Assemble
题目:http://acm.hit.edu.cn/hoj/problem/view?id=2608题意:某人要组装电脑,有资金限制。各个种类的配件必须选购其中一个,相同种类的不同质量系数的配件有不同的金额,组装后的电脑的性能由最低质量系数的配件绝对,问:如何在已有资金条件下,选购配件,使得最后的电脑性能最高。比赛时,我想应该是一种背包问题的变型,其实本题可以用二分法来做:求出所有质量中最大原创 2013-03-13 17:59:05 · 879 阅读 · 1 评论 -
Hoj 2278 IP Filtering
题目:http://acm.hit.edu.cn/hoj/problem/view?id=2278水题。判断一个IP是否在某个IP段内。将IP转换成数字,用二分法查找即可。#include #include #include #include #include #include #include #include #include #include using na原创 2013-03-20 18:03:03 · 929 阅读 · 0 评论 -
Hoj 3145 Alpaka Evolution
题目连接:http://acm.hit.edu.cn/hoj/problem/view?id=3145题意:一个有序数列的两数之和能否等于一个给定的数。注意本题有一个trick就是数据范围:-2147483647 int型的表示范围是-2147483648~2147483647。所以 2147483648会超出int的表示范围,所以想到求反再存储。另外本题O(n2)的复杂度肯定不能原创 2013-04-15 09:55:07 · 676 阅读 · 0 评论 -
Hoj 2930 Perfect Fill II
题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2930本题是处理线性递推。递推式:f[i] = 2*f[i-1] + f[i-3];求线性递推问题可以转换为矩阵运算:出任何一个线性递推式的第n项,其对应矩阵的构造方法为:在右上角的(n-1)*(n-1)的小矩阵中的主对角线上填1,矩阵第n行填对应的系数,其它地方都填0。例如,我们可原创 2013-04-15 16:57:03 · 1013 阅读 · 0 评论 -
Hoj 3132 CHI-HUO Little P
题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=3132本题学习计算几何基础:叉积我们怎么去判断一个点在一条线段的左侧还是右侧呢?这就要用到向量叉积。叉积的一个非常重要的性质是通过它的符号判断两向量相互之间的顺逆时针关系:设向量P=(x1,y1),Q=(x2,y2)如果P*Q>0则P在Q的顺时针方向;即:x1*y2 - x2*y1>0原创 2013-01-07 10:16:48 · 1008 阅读 · 0 评论 -
Hoj 1288 Bridging Signals
题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=1288标记一下LIS的DP解法:其中len[i]代表以array[i]结尾的单调递增字串的最大值。(标记一下,有些不对,以后再改)#include #include #include #include #include #include using namespace std;原创 2013-01-29 20:03:21 · 762 阅读 · 0 评论 -
Poj 3294 Life Forms
题目链接:http://poj.org/problem?id=3294本题练习后缀数组和LCP.二分查找长度是否满足条件即可。后缀数组模板:int sa[Maxn],t[Maxn],t2[Maxn],c[Maxn];int rank[Maxn],height[Maxn];//传递的两个参数:n是数组大小,m是数组内元素的Ascii码的最大值+1void build_sa(in原创 2013-05-31 08:17:10 · 1085 阅读 · 0 评论 -
SGU 253. Theodore Roosevelt
题目:http://acm.sgu.ru/problem.php?contest=0&problem=253本题要求在一个给定凸包,一些点有几个是在凸包内的(包括边界)。以前判断某一点是否在多边形内,可以叉积依次求面积的方法,但是每次查询耗时O(n)。所以这里提一种每次查询只需要O(lgn)的解法。就是先按极角排序,然后二分求给定点的极角范围,叉积计算进行求解。一开始我的线原创 2013-02-27 19:50:25 · 861 阅读 · 0 评论 -
Hoj 2995 Area
题目:http://acm.hit.edu.cn/hoj/problem/view?id=2995本题主要是理解题意和理解二分法的思路。具体还需要学会求简单的定积分。关于x ≥ 1, y ≥ 1, x * y ≤ C。 代码:#include #include #include #include #include #include #include #原创 2013-03-04 22:04:26 · 593 阅读 · 0 评论 -
Hoj 2105 Crossed ladders
本题练习二分。题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2015非常简单。只要推出公式:设墙之间距离为m double u1 = sqrt(y * y - m * m); double u2 = sqrt(x * x - m* m); double t = c * (u1 + u2) - u1* u2;以上方程很原创 2013-01-23 20:00:40 · 517 阅读 · 0 评论 -
二分法常用模板
简单定义:在一个单调有序的集合中查找元素,每次将集合分为左右两部分,判断解在哪个部分中并调整集合上下界,重复直到找到目标元素。时间复杂度:O (logn),优于直接顺序查找O(n)//x:待查找的元素, n:数组集合大小, num数组单调递增int low=0,high=n,mid,res = -1; //low:集合下界 high:集合上节while(low<=high)原创 2013-01-22 11:08:12 · 1902 阅读 · 0 评论 -
Hoj 2653 Pie
本题练习二分法:题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2651分析:对于每个确定的没人分得的面积v,可以计算出最多能满足的人数p。因此得到一个单调递减的函数关系,并且v的范围也可以确定为0~max(size(i)),i=1...n。由于精度差问题,考虑先将面积*1000000转化为整数来二分#include原创 2013-01-22 11:00:52 · 833 阅读 · 0 评论 -
二分法处理重复数组
//递增数列下界int f1(int * array,int l, int r, int key){ if (l == r) return l; int m = (l + r)/2; if (key<=array[m]) { return f1(array, l, m,key); } else { retu原创 2012-06-27 16:05:42 · 1479 阅读 · 0 评论 -
求最长不增子序列、最长单调递减子序列、最长不降子序列、最长单调递增子序列长度
免费午餐问题的引申:代码如下:#include #include using namespace std;int total = 0;vector v1;//原始数据集合vector v2;//最长不增子序列暂时集合vector v3;//最长单调递减子序列暂时集合vector v4;//最长不降子序列暂时集合vector v5;//最长单调递增子序列暂时集合//原创 2012-07-01 11:59:53 · 2763 阅读 · 0 评论 -
Hoj 1356 Prime Judge
题目连接:http://acm.hit.edu.cn/hoj/problem/view?id=1356本题我曾想以[1,500000]内的质因子为基础来判定整个int范围的质数,但是超时。无奈用Miller Rabin算法吧。根据 :费尔马小定理,如果 n 为素数,那么对于小于n的数a有a^(n-1) = 1(mod n)那么我们可以随机生成一个a(a关于a^b%n,用快速原创 2013-02-18 23:33:17 · 816 阅读 · 0 评论 -
Poj 3233 Matrix Power Series
题目连接:http://poj.org/problem?id=3233本题练习矩阵运算。需要两次用到二分法,求和一次,求幂一次。二分法的知识参考我以前写过的一篇关于二分法的思考:http://blog.youkuaiyun.com/niuox/article/details/7226471 。美其名曰:快速幂。代码:#include #include #include u原创 2012-12-02 16:02:11 · 1058 阅读 · 0 评论 -
Poj 2985 The k-th Largest Group
题目:http://poj.org/problem?id=2985题目:合并集合,求元素第k多的集合有多少个元素。合并集合很简单用并查集即可。这里我主要想说一下如何用树状数组并在线查询数集内第k小(大)的数。方法是:用树状数组记录数集中某个数出现次数,每输入一个数,相当于将该数出现次数加1,对应到树状数组中就相当于insert(t, 1),统计的时候,可以利用树状数组的求和,这样我原创 2013-03-04 17:31:40 · 1583 阅读 · 0 评论 -
Hoj 3149 The median number problem2
题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=3149分治法求两个等长有序数组的中位数。使用分治法复杂度可以从O(n)降到O(logn)。#include #include #include #include #include #include #include #include using namespace std;原创 2013-06-07 19:25:09 · 1046 阅读 · 0 评论