简单二分
简单二分
*DDL_GzmBlog
再见锋芒,准备启程
展开
-
[牛客] [NOIP2015]跳石头
tag:tag :tag: 题意 :思路 :因为题目所求的是 最短的最大 ,很标准的一个二分询问方法因此我们可以考虑二分最短距离,那么我们怎么check呢很简单,显然对于现在的需要判断的 x,如果两个石头的差小于x的时候 , 我们肯定是要将其移走的所以我们只需要判断移走的数量和m的关系即可当然移走的状态我们可以通过last进行转移code :......原创 2022-07-05 23:55:40 · 345 阅读 · 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 · 383 阅读 · 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 · 142 阅读 · 0 评论 -
[Acwing] 790. 数的三次方根 浮点数二分 | 蓝桥
前言传送门 :思路对于浮点数二分 没有整数二分那么困难我们只需要让二分的条件 尽可能的远离精度 - 2就行CODEdouble 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 · 82 阅读 · 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=midCODEvoid solve(){ cin>>n>>f; double l = 0 ,r = 0 ; for(i原创 2021-11-08 15:30:24 · 113 阅读 · 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 · 6952 阅读 · 0 评论 -
[Acwing] 102. Zuijia牛围栏 二分答案
前言加把劲 !传送门 :思路这道题如果是普通做法,显然就是一个个枚举出来,必然是不可能这么做的所以我们可以用二分来优化查找过程 :二分无非就是分为以下两种 :二分答案二分查找二分查找是查找左右区间 : 对于这题来说显然不可能而二分答案 , 我们发现有一个平均值可以做来二分所以我们可以试着二分答案,但是二分答案最难的是在checkcheckcheck里面那么我们怎么checkcheckcheck呢 ? 学过图论的朋友应该知道对于这种求题,我们一般可以使用前缀和来求解 sum[原创 2021-12-11 18:52:36 · 404 阅读 · 0 评论