
简单二分
简单二分
*DDL_GzmBlog
再见锋芒,准备启程
展开
-
[牛客] [NOIP2015]跳石头
tag:tag :tag: 题意 : 思路 : 因为题目所求的是 最短的最大 ,很标准的一个二分询问方法因此我们可以考虑二分最短距离,那么我们怎么check呢很简单,显然对于现在的需要判断的 x,如果两个石头的差小于x的时候 , 我们肯定是要将其移走的所以我们只需要判断移走的数量和m的关系即可当然移走的状态我们可以通过last进行转移 code :......原创 2022-07-05 23:55:40 · 392 阅读 · 0 评论 -
[牛客] B-完全平方数
tag:tag :tag: 题意 : 思路 : l≤x≤rl\le x \le rl≤x≤rl≤x≤r\sqrt l \le \sqrt x \le \sqrt rl≤x≤r又因为l,r≤109l,r\le10^9l,r≤109因此我们可以预处理出x\sqrt xx数组最后通过二分确定开方区间,开方区间的大小就是答案code :...原创 2022-07-05 23:30:30 · 501 阅读 · 0 评论 -
[牛客] 二分 汀博尔
[传送门] 目录思路:Code: 思路: 分析了一下 数据范围 必须是 O(n) 或者 O(nlogn) 这种级别的,由于题目是二分题 所以就一直想怎么二分,想着每次排序之后二分寻找答案? 结果错了 正解 我们 按天数 二分即可 但是防止TL 我们还需要在sort一下增加后的数组 然后从头开始贪心的拿 Code: /// O nlogn #include <bits/stdc++.h> using namespace std; const int N = 2e5+10; typedef lon原创 2021-06-15 15:04:26 · 187 阅读 · 0 评论 -
[Acwing] 790. 数的三次方根 浮点数二分 | 蓝桥
前言 传送门 : 思路 对于浮点数二分 没有整数二分那么困难 我们只需要让二分的条件 尽可能的远离精度 - 2就行 CODE double cal(double x) { return x*x*x; } void solve() { double a; cin>>a; double l = -10000,r = 10000; while(r - l >= 1e-7) { double mid = (l+r)/2; if(cal(mid) >= a)原创 2021-11-03 20:51:45 · 113 阅读 · 0 评论 -
[Acwing] 102围栏 二分答案+前缀和处理
前言 显然,二分答案 传送门: 思路 如何判断是否大于或者小于答案呢 ? 我们可以用前缀和处理 s[i]=s[i−1]+a[i]−mids[i] = s[i-1]+a[i]-mids[i]=s[i−1]+a[i]−mid 为了满足答案经可能大,所以我们需要在左端点找一个最小值 如果对于该最小值 存在合法区间 那么我们就令l=midl = midl=mid CODE void solve() { cin>>n>>f; double l = 0 ,r = 0 ; for(i原创 2021-11-08 15:30:24 · 159 阅读 · 0 评论 -
[Acwing | 蓝桥杯] 1236. 递增三元组 二分
前言 开学,练习开始了ohh 传送门 : 题意 给定三个三元组,求满足A[i]<B[j]<C[k]A[i]<B[j]<C[k]A[i]<B[j]<C[k] 的组合数量 思路 朴素做法显然是三层循环直接枚举的,1e5∗1e5∗1e51e5*1e5*1e51e5∗1e5∗1e5 但是我们发现我们可以通过 枚举bbb数组, 然后二分寻找a[],b[]a[],b[]a[],b[]数组中满足条件的个数 然后通过乘法原理直接相乘即可优化n∗logn*logn∗log 这个题目应该也原创 2022-02-24 12:13:12 · 7106 阅读 · 0 评论 -
[Acwing] 102. Zuijia牛围栏 二分答案
前言 加把劲 ! 传送门 : 思路 这道题如果是普通做法,显然就是一个个枚举出来,必然是不可能这么做的 所以我们可以用二分来优化查找过程 : 二分无非就是分为以下两种 : 二分答案 二分查找 二分查找是查找左右区间 : 对于这题来说显然不可能 而二分答案 , 我们发现有一个平均值可以做来二分 所以我们可以试着二分答案,但是二分答案最难的是在checkcheckcheck里面 那么我们怎么checkcheckcheck呢 ? 学过图论的朋友应该知道 对于这种求题,我们一般可以使用前缀和来求解 sum[原创 2021-12-11 18:52:36 · 423 阅读 · 0 评论