二分搜索
文章平均质量分 83
Brokenrivers
这个作者很懒,什么都没留下…
展开
-
P6174 [USACO16JAN]Angry Cows S 二分+贪心
我们要判断是否能覆盖所有稻草,那么肯定判断对炸弹范围利用最大化时能否覆盖。而这里可以使用贪心,先对稻草位置从小到大排序。把炸弹范围看作一个长度为2*R的线段,就变成了线段覆盖问题,每个线段要利用率最大化,那么左边界必定对齐一个稻草,然后以这个左端点为起点像后延申2*R的长度,记录可以覆盖几个稻草。如果计算期间使用的炸弹超过了k就跳出计算,并且判断此时被炸的稻草数是否为n,如果是,说明可以炸完,反之则不行。这题的困难就变成了R,判断是否可以炸掉所有稻草。首先看题目和数据,很容易想到先二分枚举答案。......原创 2022-07-17 14:41:02 · 127 阅读 · 0 评论 -
6.12 二分练习
题意:给定由01组成的数组,每次可以删除头部或者尾部元素。问使剩余数组的和为k的最小操作数。思路:题意很简单,就是找到等于k的前缀和,但是要最小操作,也就是如果有0就不能删了,这样才会满足结果且操作最少。所以去找前缀和为k的最长子段。因为前缀和数组是有序的,所以可以枚举一个右端点,二分查找使得子段和为k的左端点,然后还要使子段最长。二分左指针还要尽量左偏。也就是找到合法解之后还要让左指针左偏继续找合法解。532. 数组中的 k-diff 数对 - 力扣(LeetCode) 排序+二分 因为是讨论绝原创 2022-06-16 13:22:11 · 104 阅读 · 0 评论 -
Codeforces Round #787 (Div. 3)和Codeforces Round #790 (Div. 4) ABC/ABCDE
Codeforces Round #787 (Div. 3)A讨论极端情况即可//#include<bits/std c++.h>#include <iostream>#include<ctime>#include<math.h>#include<string>#include<vector>#include<queue>#include<stack>#include<..原创 2022-05-11 19:22:13 · 198 阅读 · 0 评论 -
普通并查集练习
P1551 亲戚 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)并查集模板模板:#include<iostream>using namespace std;const int N = 1e4;int pre[N];//每个下标节点的前驱节点void init(int n) {//初始化 for (int j = 0; j < n; j++) { pre[j] = j; }}int find(int x) {/..原创 2022-05-08 12:25:00 · 635 阅读 · 0 评论 -
最长公共子序列LCS和 最长单调子序列 及其二分优化
最长公共子序列LCS和最长上升子序列LIS都是动态规划的经典例题,再度回顾这两个例题,已经有了更深一些的理解和优化方式。这里系统整理一下 。一.最长单调子序列1.最长上升子序列最朴素的dp思路,就是对一个序列a[i],设一个dp数组, 其中dp[i]的含义为以a[i]结尾的最长上升子序列的长度。那么我们考虑当前的a[i]与与a[i]之前的元素的关系,如果当前的a[i]与a[i]之前的a[j]满足递增关系,那么dp[i]的状态可以由dp[j]得到,对每个先前状态取最值即为当前状态的最.原创 2022-04-07 00:06:38 · 2206 阅读 · 0 评论 -
4.4 周练习 选集
P1460 [USACO2.1]健康的荷斯坦奶牛 Healthy Holsteins - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)常规的dfs,但是输出路径和判断出口有点琐碎。输出路径需要一个ath数组在更新最优解的时候拷贝占位数组used(因为used回回溯,搜索结束为空),出口的话枚举每个被选过的饲料(used==1)的维生素,如果有不满足就return。比较简单#include <iostream>#include<vector>#inc.原创 2022-04-06 23:06:51 · 405 阅读 · 0 评论 -
二分模板 和 边界问题 及 相关STL使用 的小结
二分查找应该算是我最早接触的一个算法了,那时候我看的c语言资料里的循环就是拿二分举例的。同时二分的思想也非常好理解,但我没想到的是,这个算法看似非常简单,但是光是想要逻辑清晰的用二分找出一个个限定范围的数确实这么困难(指因为调二分的边界问题调到心态爆炸orz)。在系统的思考和查阅资料后我现在才有把握,快速且不会因为思考边界问题而出错的手写出下列问题。对于一个序列{1,2,3,5,5,5,8,9}①找出第一个 >=5 的元素②找出最后一个 <5 的元素③找出第一个 >5原创 2022-03-28 08:34:20 · 646 阅读 · 2 评论