合集-二分题集
摘要:原题链接 通过集思广益,我总结了一些不同的解法。 法一:二分答案 一般最大最小值问题都可以考虑一下对答案进行二分。 1、若能合成k件装备,那么k-1,k-2,...都能够合成。所以我们要找到11110000中最右边的1。 2、判断k件装备能否成立。设消耗的2a3b有m件,那么4a1b的有k-m件 列
阅读全文
摘要:原题链接 典型的二分答案,01规划。 那么我们只需要二分x求出最大的x即可,因此我们只需求出所有v-x*c的值并把最大的k个求和保证sum>=0即可。 主要代码: #include<bits/stdc++.h> using namespace std; const int N=1e4+5; type
阅读全文
摘要:原题链接 这道题是一道隐蔽的二分答案题(01规划)。但由题目中的“最多”一词也可以知晓。 我们可以把题目中的joker类比成万能牌,但一套牌中只能最多有一张万能牌。 那么对于预期答案k,我们想要验证,只需要sum+=min(0,k-a[i]);然后我们要判断sum<=m并且sum<=k(一套牌中只能
阅读全文
摘要:原题链接 根据最近的刷题经验,这种求最大最小值问题都是二分答案。 首先,我们确定面对一个k,如果它符合题意,那么比他小的值也符合,如果他不符合题意,那么比他大的值更不符合;那么我们要求的就是符合找出11110000中最右边边的1。 接着,我们该如何判断k是否符合题意呢? 显而易见,从起点遍历所有的石
阅读全文
摘要:原题链接 首先这道题的数据量1e5那么时间复杂度要保持在O(nlogn)内。 先判断单调性,若k头牛拿不到礼物,那么k-1头牛也拿不到礼物,所有这题可以用二分法来做(11110000)。 二分部分省略,我们直接来分析check部分(如下)。 bool check(int k){ for (int i
阅读全文
摘要:原题链接 很典型的二分答案题目。但是新颖点是他要输出每块巧克力在哪一天吃,很多人(包括我自己)就可能想当然的直接在累加的时候处理,如下: for (int i=1;i<=d;i++){ sum/=2; while (sum<m){ if (cnt>n) return false; sum+=a[cn
阅读全文
摘要:原题链接 一道二分+差分的题目,作为学习前缀和 和 差分 的引入题目非常合适。 首先检验其单调性,如果一个申请人订单不用修改,那么其前面的申请人也不用修改,符合单调性。 接着,这道题暴力的思路就很简单,但是看到运算量(n,m高达1e6),暴力的时间复杂度为O(n*m)显然超时。 那么就是运用差分思想
阅读全文
摘要:原题链接 首先要读懂题目啊 :[Wj>=W] 其实是一种bool表达,即大于等于时取1,小于时取0,然后再进行求和。 根据要求出 最小值 大概可以猜测要运用二分,那么我们来判断单调性,首先W在所有矿石的最大最小值之间取值,W越小Y越大,W越大Y越小(观察和推理都很容易得到),那么Y是符合单调性的,即
阅读全文
摘要:原题链接 作为二分答案的入门题非常合适。 很典型的二分答案。但是这题有一个坑点,left的值不能设为0这种确定的值,而是应该设为这个数组的最大值。 这道题警示了我二分答案的一个重要前提:确定合理的二分区间。 题解 首先,判断单调性,对于一个最大值mid,如果能够满足check(),那么mid+1,m
阅读全文
摘要:原题链接 解法一:二分搜素 首先我们知晓A-B=C,那么A=B+C,我们只需要遍历数组中的每一个元素然后在数组中搜素a[i]+c的值是否存在即可。 Code #include<bits/stdc++.h> using namespace std; typedef long long ll; cons
阅读全文
摘要:cf链接 洛谷链接 方法一 最大最小值问题我们很容易想到二分答案法。那么我们如何写出check函数呢? 对于答案x,若x-i+1<a[i],则选定怪物一定不在 i 位置左侧,即L=i; 若x-n+i<a[i],则选定怪物一定不在 i 位置右侧,R=min(R,i)。 遍历数组,如果L<=R则答案符合
阅读全文
摘要:原题链接 题解 着重点:分类讨论+二分中位数 首先,由于要求中位数,我们先将数组进行排序;接着我们取遍所有的ai及其对应中位数。 此时,分歧产生,我们有k次增值的机会,是加到ai(不会改变中位数)上 还是 增值后改变中位数(此时中位数可能改变)? 显然,我们要分类讨论 情况一:我们加到选取的ai上,
阅读全文
摘要:原题链接 题解 显然采用二分答案,下面讲解 check 函数怎么写。 观察到 n 的属于1000以内,所以我们的check函数可以采用平方的复杂度。 我们采取枚举法,假定 ai 可以达到我们的理想值,那么我们只需要从 i 位置开始考虑 k 怎么分配即可。 code #include<bits/std
阅读全文