随笔分类 -  刷题 / 二分题集

摘要:原题链接 作为二分答案的入门题非常合适。 很典型的二分答案。但是这题有一个坑点,left的值不能设为0这种确定的值,而是应该设为这个数组的最大值。 这道题警示了我二分答案的一个重要前提:确定合理的二分区间。 题解 首先,判断单调性,对于一个最大值mid,如果能够满足check(),那么mid+1,m 阅读全文
posted @ 2024-02-09 23:09 黑屿白 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 首先要读懂题目啊 :[Wj>=W] 其实是一种bool表达,即大于等于时取1,小于时取0,然后再进行求和。 根据要求出 最小值 大概可以猜测要运用二分,那么我们来判断单调性,首先W在所有矿石的最大最小值之间取值,W越小Y越大,W越大Y越小(观察和推理都很容易得到),那么Y是符合单调性的,即 阅读全文
posted @ 2024-02-03 14:48 黑屿白 阅读(27) 评论(0) 推荐(0) 编辑
摘要:原题链接 一道二分+差分的题目,作为学习前缀和 和 差分 的引入题目非常合适。 首先检验其单调性,如果一个申请人订单不用修改,那么其前面的申请人也不用修改,符合单调性。 接着,这道题暴力的思路就很简单,但是看到运算量(n,m高达1e6),暴力的时间复杂度为O(n*m)显然超时。 那么就是运用差分思想 阅读全文
posted @ 2024-02-01 20:40 黑屿白 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原题链接 很典型的二分答案题目。但是新颖点是他要输出每块巧克力在哪一天吃,很多人(包括我自己)就可能想当然的直接在累加的时候处理,如下: for (int i=1;i<=d;i++){ sum/=2; while (sum<m){ if (cnt>n) return false; sum+=a[cn 阅读全文
posted @ 2024-01-30 16:11 黑屿白 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原题链接 首先这道题的数据量1e5那么时间复杂度要保持在O(nlogn)内。 先判断单调性,若k头牛拿不到礼物,那么k-1头牛也拿不到礼物,所有这题可以用二分法来做(11110000)。 二分部分省略,我们直接来分析check部分(如下)。 bool check(int k){ for (int i 阅读全文
posted @ 2024-01-30 14:05 黑屿白 阅读(21) 评论(1) 推荐(1) 编辑
摘要:原题链接 这道题是一道隐蔽的二分答案题(01规划)。但由题目中的“最多”一词也可以知晓。 我们可以把题目中的joker类比成万能牌,但一套牌中只能最多有一张万能牌。 那么对于预期答案k,我们想要验证,只需要sum+=min(0,k-a[i]);然后我们要判断sum<=m并且sum<=k(一套牌中只能 阅读全文
posted @ 2024-01-26 14:52 黑屿白 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原题链接 典型的二分答案,01规划。 那么我们只需要二分x求出最大的x即可,因此我们只需求出所有v-x*c的值并把最大的k个求和保证sum>=0即可。 主要代码: #include<bits/stdc++.h> using namespace std; const int N=1e4+5; type 阅读全文
posted @ 2024-01-26 13:16 黑屿白 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 通过集思广益,我总结了一些不同的解法。 法一:二分答案 一般最大最小值问题都可以考虑一下对答案进行二分。 1、若能合成k件装备,那么k-1,k-2,...都能够合成。所以我们要找到11110000中最右边的1。 2、判断k件装备能否成立。设消耗的2a3b有m件,那么4a1b的有k-m件 列 阅读全文
posted @ 2024-01-23 16:33 黑屿白 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原题链接 根据最近的刷题经验,这种求最大最小值问题都是二分答案。 首先,我们确定面对一个k,如果它符合题意,那么比他小的值也符合,如果他不符合题意,那么比他大的值更不符合;那么我们要求的就是符合找出11110000中最右边边的1。 接着,我们该如何判断k是否符合题意呢? 显而易见,从起点遍历所有的石 阅读全文
posted @ 2024-01-17 19:46 黑屿白 阅读(15) 评论(0) 推荐(0) 编辑