
二分搜索
Soar-
这个作者很懒,什么都没留下…
展开
-
以 lower_bound 函数入门二分搜索(形成自己的代码风格)
Lower_bound函数:给定长度为n的单调不下降数列a0,a1,,,an-1,和一个数k,求满足ai>=k条件的最小的i,不存在的情况下输出n;每个人都会,但是一定要从这种简单题中,形成自己的二分搜索的编程风格!对后面的难度较大、复杂的二分搜索大有裨益!这里给出我的代码和理解:int n,k;int a[n];void solve(){ int lb=-1原创 2018-02-03 23:07:36 · 246 阅读 · 0 评论 -
POJ---1759(Garland,二分一个,求另一个的最优)
题意:N个点,每个点离X轴的距离满足如下关系:H1 = A Hi = (Hi-1 + Hi+1)/2 - 1, for all 1 HN = B Hi >= 0, for all 1 一直A,求B的最小值。题解:由递推关系式可以知道,确定H2,剩下的所有H都可以确定,二分求H2的最小,进而得出HN的最小即可。#include#include#原创 2018-02-05 00:08:31 · 267 阅读 · 0 评论 -
POJ---3662(Telephone Lines,最短路+二分*好题)
题意:给定一个无向有权图,权值代表修建电线需要的花费,公司给报销K条线,这个人需要付款剩下的线路中花费最大的那个线路。 题解:最短路问题,只不过这时候的最短路不是让求最短的距离了,而是给定一个花费X,是否有一条通路能够满足,恰好有K+1条路满足>=X,这个X就是可行解。二分去求最小的可行解就可以了!所以这个时候d[]数组放最短距离已经没有任何意义了,而是放到达终点>=X的边数最原创 2018-02-05 00:08:27 · 291 阅读 · 0 评论 -
POJ---2010(Moo University - Financial Aid,优先队列)
题意:一共C个学生,学校要录N(奇数)个,每个学生的分数和需要的aid给出,学校最多能提供F资金,求录取的学生中分数中位数最大。题解:方法1:对所有的学生按照分数进行从小到大排序,左边从第N/2+1个学生开始,到第C-N/2个学生结束,算出每个学生以他的分数为中位数,左边需要的最小总aid,需要用到优先队列!同样地,对右边也进行计算,以每个学生自身为中位数,右边需要的最小总aid。原创 2018-02-04 21:52:41 · 398 阅读 · 0 评论 -
POJ---3685(Matrix,二分搜索)
题意:给定一个N*N矩阵,其中Aij =i2 +100000 ×i + j2 - 100000 × j + i × j。求矩阵中第K大的数。 题解:自然的想法还是算出来所有的Aij,排序,然后二分找第K大的数,时间复杂度又来打了O(N2),肯定会超时。 注意观察Aij =i2 +100000 ×i + j2 - 100000 × j + i × j。这个式子原创 2018-02-04 17:10:50 · 245 阅读 · 0 评论 -
POJ---3579(Median,二分搜索)
题意:给定N(3 ≤N ≤ 1,00,000)个数,两两的差值,形成一个新序列,求这个新序列的中位数。 题解:直接的是算出来两两的差值,然后再排序。这样以来时间复杂度来到了O(N2),肯定会超时。二分思想:每次判断Mid是否符合中位数:扫描一遍所有的数,计算每个数能与多少数构成差值小于Mid,将所有的小于Mid的数量加起来为cnt,判断cnt是否>=M(说明Mid选的太大了,同原创 2018-02-04 16:21:56 · 284 阅读 · 0 评论 -
POJ---2976(二分,最大化平均值详细讲解)
题意:最大化平均值的模型:有N个物品的重量和价值分别为Wi和Vi,从中选取K个物品使得单位重量的价值最大。也就是使得K个物品的ΣVi /ΣWi最大。使用二分搜索解决这类问题:ΣVi /ΣWi >= x也就是Σ(Vi-x*Wi)>=0。X越大,式子左边越小,一直逼到=0的边界!贪心思想去找最大的可行解x即可:对Vi-X*Wi排序,选取前K个看是否>=0! 本题也就是这个模原创 2018-02-04 15:08:27 · 704 阅读 · 0 评论 -
POJ---3111(二分,最大化平均值)
题意:最大化平均值的模型:有N个物品的重量和价值分别为Wi和Vi,从中选取K个物品使得单位重量的价值最大。也就是使得K个物品的ΣVi /ΣWi最大。使用二分搜索解决这类问题:ΣVi /ΣWi >= x也就是Σ(Vi-x*Wi)>=0去找最大的可行解x即可!X越大,式子左边越小,一直逼到=0的边界!本题属于这个模型!只不过最后让输出的是选出来的是哪些物品,一样的,对Vi-原创 2018-02-04 15:32:15 · 193 阅读 · 0 评论 -
POJ3104(Drying,最小化,可行解)
题意:蒸衣服,单位时间掉K单位的水。不蒸单位时间掉1单位的水。给定n件衣服的水量和K,求K的最小值。 题解:最小化可行解。#include#include#include#includeusing namespace std;int a[100000+5];int n,k;bool C(int x){ long long sum=0; f原创 2018-02-04 01:31:09 · 287 阅读 · 0 评论 -
POJ---3273(二分,最小化最大值)
和这道题一样了:Description聪哥在暑假参加了打零工的活动,这个活动分为n个工作日,每个工作日的工资为Vi。有m个结算工钱的时间,聪哥可以自由安排这些时间,也就是说什么时候拿钱,老板说的不算,聪哥才有发言权!(因为聪哥是土豪,他是老板的老板)聪哥不喜欢身上一次性有太多的钱,于是他想安排一下拿钱的时间,使他一次性拿的钱中最大的最小。(最后一天一定要领钱)Input原创 2018-02-04 01:17:17 · 332 阅读 · 0 评论 -
POJ---3258(River Hopscotch,最大化最小值)
题意:和上一道题类似,只不过把倔牛换成了石头,求n-m个石头的最大的最小距离。最大化最小值。 题解:最大化最小值,二分!和上一道题几乎一样,这里只不过多了,最后一个固定的石头!要判定下放下去的n-m个石头,最后一个放下的石头离固定石头的距离是否>=d; #include#include#include#includeusing namespace std;原创 2018-02-04 00:54:45 · 248 阅读 · 0 评论 -
POJ---2456(Aggressive cows,贪心最大化最小值)
题意:有N头牛,其中有M头倔牛,要求最大化这M头牛最小距离。 题解:最大化最小值,二分!对于所有的距离贪心判断这M头牛是否能放下去。 个人认为本题数据有问题,对于M=2的时候,好像~~~没有判定!因为代码中初始化ub为x[N-1]-x[0]或者x[N-1]-x[0]+1都能AC。显然前者是错误的! #include#include#include#includ原创 2018-02-04 00:43:46 · 436 阅读 · 0 评论 -
POJ---1064(Cable master,简单二分判断可行性)
题意:有N条绳子,他们的长度分别为Li,如果从他们中切割出K条长度相同的绳子的话,这K条绳子每条能最长能多长?答案保留小数点后两位。 题解:判断可行性,很明显的二分搜索。寻找最大的L,满足能切割出K条绳子!题目虽然简单,但是体现了二分搜索的基本思想和编程风格(这里是浮点数,所以怎么循环还是要注意的,简单粗暴的就是直接循环100次)。注意:这里的保留小数点后两位,并不是四原创 2018-02-04 00:15:53 · 415 阅读 · 0 评论 -
POJ---3484(Showstopper,二分)
题意:给定若干个等差序列,这些个等差序列中每个元素出现的次数为偶数才算正常,现在有一个BUG:仅有一个元素出现了奇数次,让你找出这个元素和它出现的次数! 题解:找特性:仅有一个元素出现了奇数次。举个栗子。1 2 3 4 5 6 7 8 9 10 41 2 3 4 5 6 7 8 9 10 很明显bug元素是4。也就是前面的元素1原创 2018-02-05 00:08:38 · 304 阅读 · 0 评论