二分法
aozil_yang
这个作者很懒,什么都没留下…
展开
-
例题 8-3 UVA - 1152 4 Values whose Sum is 0(和为0的4个值)(二分枚举)
题意:给你4个n 元素的集合ABCD,要求分别从中选取一个元素abcd使得a + b + c + d = 0问有多少种选法!思路:先把A数组和B数组所有的组合情况都记录到tmp数组,排序,然后枚举C数组和D数组,取相反数,然后二分枚举tmp数组中值,取上界upper_bound 和取下界 lower_bound 做差即可!#include#include#includeu原创 2016-05-19 14:58:14 · 447 阅读 · 0 评论 -
ICPCCamp2017 Day 4 A The Catcher in the Rye(二分+光的折射定律)
大体题意:告诉你有三个矩形连在一起,要求你从第一个矩形左下角出发,到第三个矩形的右上角,在每个矩形中速度不一样,求最少时间?思路:最容易想到的是三分。取第一个矩形的走的高度是x, 第二个玻璃走的高度是y,列一个函数发现是一个凹函数。三分就好了。但是时间是0.25s 过不了。不过有大神 有一个小技巧,就是把这三个矩形 缩小h倍。 最后算完 在乘回去。 (好猛= =)原创 2017-02-16 22:51:03 · 424 阅读 · 0 评论 -
ICPCCamp2017 Day 5 I Coprime Queries(莫比乌斯函数 + 容斥定理 + 二分)
题意:给你n 个数,和n 个询问,每个询问有l,r,x,问在区间l~r中与x互质的最大位置在哪里?思路:以为是个线段树,想了好久 都没有确切的好的思路。其实是容斥定理。考虑30:质因子分解 30 = 2*3 *5那么我们可以求出l到r中 与30 不互质的数有几个。很显然那些数满足 有2的因子或者有3 的因子或者有5的因子。是一个并集。那么我们就加上2的个数 加上原创 2017-02-18 03:13:45 · 497 阅读 · 0 评论 -
UVA 1471 Defense Lines (STL + 二分)
大体题意:给你一个长度为n(n 思路:因为要删除一个连续的子序列,所以会分成左右两部分之和的形式,我们枚举右边一部分的起点位置i,快速的找到左边一个合适的位置j,使得a[j] (注: g[i]表示以i 位置结束的最长上升连续子序列的长度,f[i]表示以i位置开始的最长上升连续子序列的长度)这样我们可以利用set 来维护当前合法的左边位置的值。什么是合法的? 必须是a[i]原创 2017-03-01 22:21:22 · 338 阅读 · 0 评论 -
UVA 714 Copying Books(二分+贪心)
大体题意:给你n 个数,要求分成m份,使得m份中的最大值最小,要求打印解,如果多解,要求第一份最小,其次第二份最小,,依次类推。思路:最大值最小,肯定是二分了。我们直接二分最大值,找一个最小的答案x。然后我们划分n 个数,因为越往前越小,所以肯定从后向前枚举。然后第i 个数要不要划分的话,有两个依据,当前和超过了x 或者 剩下的可以切的刀数不足 要求的刀数,那么就必须划分原创 2017-02-26 00:24:34 · 389 阅读 · 0 评论 -
UVA 1616 Caravan Robbers(二分 + 小数变分数)
大体题意:给你n 个线段,要求重新规划每个线段,使得每个线段的长度都一样,并且线段之间没有交点,问线段的最大长度是多少?思路:很容易想到二分线段的最大长度,然后看这个长度是否合适,合适就往右划分,不合适就往左划分。我直接说正解了:因为是输出分数,我们应该二分的时候用小数,然后小数变分数,找一个最接近的分数即可,枚举分母计算分子就可以。吐槽:一开始用的分数类二分,这样肯定原创 2017-03-11 00:02:11 · 718 阅读 · 0 评论 -
POJ 2559 Largest Rectangle in a Histogram(RMQ+二分)
题意:给你n 个宽度为1 高度不同的矩形,要求求最大的矩形面积, 高度低的可以向挨着的高度高的扩展。思路:很多都是单调栈,dp之类的。给大家 提供另一个思路:枚举矩形中心,二分右边最远能到哪,二分左边最远能到哪,更新最大值即可。一个区间合不合适,只要这个区间的最小值是否等于中心的高度即可。可以用RMQ处理。#include #include #include #原创 2017-03-15 00:23:31 · 475 阅读 · 0 评论 -
Codeforces Round #404 (Div. 2) -- C. Anton and Fairy Tale(二分)
题意:谷仓里最多有n 个谷子, 每天早上都会运来m 个 ,多了的就不要了,第i 天呢会有i 只鸟来吃谷子, 每一个鸟都会吃,都只吃一个,问你哪一天谷仓为空?思路:分类讨论了:当n 当n > m时候 我们发现 前m 天 一直都是满的 ,不可能为空, 第m+1天早上 满的,晚上 会少m-1个, 第m+2天早上又运来m 个,下午没了m-2个,那么假设第x 天没了的话,那么原创 2017-03-16 05:20:21 · 357 阅读 · 0 评论 -
POJ 3261 Milk Patterns (后缀数组 + 二分)
题意:给你一个两万的数组, 求可重叠的K次最长重复子串。思路:后缀数组经典问题类似于求不可重叠的最长重复子串。先求一遍后缀数组, 给sa数组 分块。二分长度m每一块 height 必须大于等于 长度m。然后如果存在一块, 满足数量大于等于k 那么这个长度m就是合法的。 继续二分即可。#include #include #include #include原创 2017-04-28 18:07:39 · 318 阅读 · 0 评论 -
POJ 1743 Musical Theme (后缀数组 + 二分)
题意:给你一个数组,求最长重复不重叠子串, 一段子串 如果每个元素加上或减去某个数 也是相同的。思路:虽然每个元素加上或减去某个数也是一样的, 那么这一段相邻的差值是不变的, 那么我们就可以求 差值数组的后缀数组。这样 就可以直接用后缀数组来做了,论文里的例题。二分长度k, 然后给sa 数组进行分块。每一块中height必须都要大于等于k那么每一块中 的最大sa - 最原创 2017-04-28 17:06:33 · 473 阅读 · 0 评论 -
UVA 11107 Life Forms(后缀数组+二分)
思路:后缀数组+二分:我们先把n 个字符串用不同的字符连接起来,注意最后要加上一个字符。然后求这个字符串的后缀数组。然后二分答案,判断长度len 是否可行。 判断方法是同样的套路,给sa数组进行分块,每一块都大于等于长度len,然后判断每一块是否有超过一半的串在这一块中出现, 可以开一个flag数组, 记录每一块的字符串, 最后统计flag数组即可。这样我们二分得到了最长长度l原创 2017-05-03 22:36:27 · 404 阅读 · 0 评论 -
HDU 4614 Vases and Flowers (线段树[区间赋值+区间求和] + 二分)
题意:给你n 个花瓶,每个花瓶只能放一朵花。两种操作操作1:给你f 朵花, 从a位置开始放,如果空花瓶不够了,或者花放完了, 就不放了。 输出 放的第一朵的花的位置 和最后一朵花的位置。操作2:给定区间[a,b] 将这个区间内的花瓶清空, 输出扔花的数量。思路:操作2很好处理, 先查询这个区间花的数量(有花可以设置为1,没花为0), 在区间修改原创 2017-06-19 00:53:29 · 597 阅读 · 0 评论 -
CodeForces - 384E Propagating tree(DFS序 + 二分 + 线段树)
题意:给你一棵树, 两种操作:1. 将结点x 所有后代进行加和val, x 结点加 val ,x 孩子 加(-val) x 孩子的孩子加 -(-val), 以此类推。2. 求结点x 的权值。思路:比赛时没啥好思路,就做别的题去了, 但总感觉这就是线段树。果真没错。 其实挺水的= =整体思路:先将树dfs序跑一遍, 使得每个点变成连续的。将树分成两原创 2017-07-09 22:08:31 · 509 阅读 · 0 评论 -
HDU 5649 DZY Loves Sorting (二分 + 线段树)
题意:给你n 个数(1~n的排列), m 个操作, 操作1: 将指定区间 升序排序操作2: 将指定区间降序排列。最后问你某一个的位置的数是多少?思路:神题~~~没想到这能二分去做。。直接二分那个数是啥。 然后模拟整个操作。将比二分的值小的赋为0, 大的赋为1, 然后就是模拟操作对于升序排序, 直接看看这个区间有多少个0, 多少个1,(线段树维护原创 2017-08-11 19:08:53 · 377 阅读 · 0 评论 -
Gym - 101190E Expect to Wait(数形结合 , 二分, 查分)
题意:告诉你n 个操作过程, + 代表 在t 时刻来了k 个车, - 代表在t 时刻 来了k 个人, 每个人都要开走车, 没车的话 一直在队列里等, 告诉你每一天开始有多少辆车, 求所有人的等待时间总和, 如果有人拿不到车就输出 inf。思路:数形结合的思想。n 个操作可以分成n-1 段, 记录每一段的人和 等待时间。那么一开始有x 辆车的话, 那么只需要将大于x原创 2017-08-30 09:38:41 · 674 阅读 · 0 评论 -
POJ 1267 Fence(几何 + 二分)
大体题意:给你n 条木棍,要用它们组成凸多边形,每个木棍都要用上,使得面积最大,数据范围3 如果不存在的话,要输出0.00.(结果保留两位小数)思路:首先这个题目得知道,固定边长的多边形面积最大是 圆内接多边形!参考网站:点我打开网站是然后思路是很明确的,我们直接二分枚举圆的半径R,然后判断那n 个边是否能放在这半径为R的圆里面。判断方法:你可以把根据圆的半原创 2017-01-10 14:53:54 · 580 阅读 · 0 评论 -
UVA 12124 Assemble (二分 + 字典树)
大体题意:你有b 元钱,要组装一台电脑,有n 个配件,属于不同的种类,你要在每一种配件里选择一个配件,使得品质最差的配件尽可能的大,问最差配件的最大值!思路:解决“最小值最大”的常用方法是二分答案。我们可以二分答案 x, x 即可品质最差的配件的质量!然后我们开始枚举每一种配件,我们在每一种配件质量大于等于x 的配件中选择一个最便宜的!当质量与钱数均合适的情况下,这个答案x原创 2016-12-05 22:34:08 · 346 阅读 · 0 评论 -
HDU 5806 NanoApe Loves Sequence Ⅱ (滑动窗口 或者 二分法)
NanoApe Loves Sequence ⅡTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/131072 K (Java/Others)Total Submission(s): 797 Accepted Submission(s): 376Problem DescriptionNan原创 2016-08-07 23:27:58 · 577 阅读 · 6 评论 -
UVALive 7374 Racing Gems (最长上升子序列--二分法)
大体题意:你在一个二维坐标轴上运动,每一行都有钻石,你竖直运动速度固定,是V,水平速度 是-V/R ~ V/R不等!你可以随时调整速度!刚开始你在Y轴0~w任意一个位置,求出你所吃的钻石的最大数目?思路:题解很巧妙,既然你可以随时调整速度,你为了吃到更多,只看最大速度就行了!我们可以在每一个钻石求出一个覆盖范围,什么意思呢,既然水平速度 向左的最大值等于向右的最大值,那么肯定原创 2016-08-20 01:01:56 · 962 阅读 · 0 评论 -
CodeForces 589F -- F. Gourmet and Banquet (二分 + 贪心)
F. Gourmet and Banquettime limit per test 2 seconds memory limit per test 512 megabytes input standard input output standard output A gourmet came into the banquet hall, where the cooks sugg原创 2016-08-11 00:18:29 · 663 阅读 · 0 评论 -
UVA - 10125 Sumsets (预处理 + 二分)
大体题意:给你一个最大长度为1000的数组,让你从中找出四个不同的元素 a,b,c,d,满足 a + b + c == d如果存在 就让d 尽可能的大,否则输出no solution思路:把等式变换一下 a + b == d - c;那么我们可以先两层循环,求出所有的a + b 来,然后再两层循环枚举 d 和c,二分 a+b,看看满不满足!这样复杂度n*n log n级原创 2016-09-05 15:54:00 · 387 阅读 · 0 评论 -
HDU 5878 I Count Two Three (DFS预处理 + 二分)
大体题意:给你一个数字n 找出一个大于n 的最小数字,满足它的素因子只有2,3,5,7组成!思路:直接利用set 进行dfs打表,set 中已经存在了就不用在dfs了,打完表直接二分查找即可!详细见代码:#include #include #include #include using namespace std;typedef long long ll;const原创 2016-09-17 20:19:13 · 463 阅读 · 0 评论 -
UVA - 10534 Wavio Sequence (二分法最长上升子序列)
大体题意:给你一个长度为n 的数组,要求求出一个长度为奇数并且最长的上升子序列(不一定连续),要求前k + 1项严格递增,后k+1项严格递减!输出最大长度?思路:最长上升子序列,因为n 最多是10000,我们必须用n log n 级别的复杂度!我们可以先预处理,求出到每一个位置i 的最长上升子序列的长度!在倒着求,倒着枚举求出每一项的最长上升子序列长度! (这样反过来原创 2016-09-05 19:47:08 · 694 阅读 · 0 评论 -
UVA - 10341 Solve It (数学--二分法求解)
大体题意:给你一个函数,给你定义域,求出是否有解,有解输出解,无解输出 No solution思路:分析式子和输入 知道这个式子是一个单调递减的,那么就可以用二分了!当两个端点 的函数值乘积大于0时,说明同号,则无解!否则有唯一解! 直接二分找就可以了!教训:这种求解方程的二分,涉及到小数的二分 ,最好用循环多少来解,不要用l #include#include原创 2016-09-05 19:51:39 · 383 阅读 · 0 评论 -
UVA - 10635 Prince and Princess (二分法 求最长上升子序列)
大体题意:给你两个数组,求最大公共子序列的长度?思路:数据很大,直接求最大公共子序列会超时!需要转换 一下,因为题目中说 不会出现重复数字,所以可以给第一个数组 重新编号,那么可以映射到第二个数组,第二个数组没有在第一个数组中出现的就不要了,因为肯定不在公共子序列中!转换完成之后,公共子序列肯定是第一个数组的子序列,并且第一个数组是严格递增的!因此公共子序列也是严格递增的!原创 2016-09-06 15:24:09 · 397 阅读 · 0 评论 -
UVALive 6656 Watching the Kangaroo (区间排序 + 二分)
大体题意:给你最多10万个区间,和最多10万个查询, 每个查询会输入一个整数x,x在一个区间上有一个值,如果x不在区间内部,那么这个值为0,否则 为 到左端点和右端点的距离的最小值,要求求出每一个x 在所有区间值的最大值?思路:比赛时没有做出来,赛后补得,用二分做!比较巧妙!先把每一个线段分成两半,左区间和右区间(注意::分区间一定要看好边界,WA了好几次= =)然后给区间排序原创 2016-09-28 15:58:46 · 296 阅读 · 0 评论 -
POJ 3388 Japanese Puzzle(二分法)
大体题意:给你一个n*n 的图,你总共有k 种花砖,告诉你每一种花砖的个数,你可以任意安排花砖!问最多有几行 他们的图案是一样的?思路:二分法:直接二分答案 行数, 在看每一种花砖 在每一行中的个数,这样累加 直到累加到 n 就说明当前的行数 是可行的,用个变量更新一下! 最后二分完毕后 就是最大行数!然后打印解!个人觉得 这个打印解真的好烂! 输出为n 行,任原创 2016-11-12 11:30:43 · 820 阅读 · 0 评论 -
POJ 3110 Jenny's First Exam (二分 + 树状数组 + 贪心 + 预处理年份)
大体题意:告诉你n 个科目的考试日期,在考试当天不能复习,每一个科目的最早复习时间不能早于考试时间的t天,每一天你可以复习完一科,也只能复习一科,求最晚的复习时间!思路:题目中描述的考试时间是1900年到2100年 总共200年,但这只是考试日期,还有早于考试时间的t天,t最多是10w,2年多!因此我们要计算1600年到2100年这 500年的时间!为了方便计算,我们先把日期映射成原创 2016-11-15 22:47:28 · 732 阅读 · 0 评论 -
Codeforces Round #379 (Div. 2) -- C. Anton and Making Potions(简单的分类讨论 + 二分)
大体题意:你要制作n 个药水,正常情况下 是x秒能造1瓶,但为了节省时间,你有两种方式来加速!一种是花费一定数量的金币 来获得速度, 会改变制造一瓶的时间 ,另一种 会瞬间得到 一定量的药水!你有s 金币,告诉你每一类的每一个的花费。求最少时间! 每一类最多用一个魔法!思路:简单模拟一下就行了!为了不漏解,分四种情况讨论!1. 两种全不用 直接是x 秒1瓶!这个很原创 2016-11-16 17:44:10 · 506 阅读 · 0 评论 -
UVALive 4035 Undetectable Tour (二分 + 并查集)
大体题意:你要从左下角走到右上角,但是安装了k (k 思路:只要能够从左边或者上边出发 找一系列连续的监视器 链接到右边或者下边 我们就逃不了! 因此我们先给每个监视器按照范围排序,找一个合理的值 前面的肯定都符合 后面肯定都不行!难点就是判断这个半径行不行,方法是并查集,把左上边看成一个点,把右下边看成另一个点,其余监视器都是点,能相连就相连 最后如果发现左上边和右下边相连肯原创 2016-11-21 01:01:35 · 452 阅读 · 0 评论 -
UVA 12097 Pie LA 3635 (二分)
大体题意:给你n 个圆形派,有F+1个人来分这n 个派,每个人得到派的面积必须一样大,求最大面积(派必须是完整的,不能拼接!)思路:二分,我们直接二分答案x,看这个x合适不合适的标准是 能不能在n 个圆形派中,分出面积为x 的个数不少于f+1个,不行的话,继续搜!一个面积为S的派能分面积为x 的个数为 S/x详细见代码:错了很多遍,注意二分的边界问题!!#inclu原创 2016-12-05 22:22:25 · 359 阅读 · 0 评论 -
HDU 6197 array array array (2017沈阳网赛- 最长上升子序列)
题意:告诉你n 个数, 问你是否去掉k 个数后, 原序列变成非严格递增序列或者非严格递减序列。 思路:显然求一遍LIS , 倒过来在求一边LIS, 比较ans 和 k 的关系即可。#include #include #include using namespace std;int T;const int maxn = 100000 + 10;int a[maxn],原创 2017-09-11 08:38:21 · 808 阅读 · 0 评论