当前位置: 首页 > article >正文

蓝桥杯备赛 Day8 二分

二分

1.要点

选取左闭右闭,[left,right]
(1)二分查找:有序数组,且无重复元素寻找目标值key

int left=0,right=n-1,res=-1;//未找到返回-1
while(left<=right){int mid=left+((right-left)>>1); //注意右边括号,+号优先于>>if(a[mid]==key){res=mid;break;}else if(a[mid]<key){ //key在现在区间右侧left=mid+1;}else{ //key在现在区间左侧right=mid-1;}
}

(2)二分答案:广义的有序,查找某种条件的最大(最小值)(最大值最小化和最小值最大化),三个条件:

  1. 答案在一个固定区间内;
  2. 可能查找一个符合条件的值不是很容易,但是要求能比较容易地判断某个值是否是符合条件的;
  3. 可行解对于区间满足一定的单调性。换言之,如果x是符合条件的,那么有x+1或者x-1也符合条件。(这样下来就满足了上面提到的单调性)
int left=0,right=-1;
while(left<=right){int mid=left+((right-left)>>1);if(check(mid)) right=mid-1; //这边以最大值最小化举例,如果mid符合条件,说明它至少不是最小的,还可以再缩小区间,且固定区间是单调递增的else left=mid+1;
}
cout<<left<<"\n"; //输出left,而不是right

2.例题

2022 青蛙过河(二分答案最大值最小化)

找最小的跳跃距离y,是单调的;将总的区间划分为多个长度为y的子区间,只要每个子区间高度和(前缀和)大于等于2x即可(寻找目标target y的判断条件),所以为一个二分问题,left=1,right=n,如果mid满足判断条件,说明不是最小的跳跃距离,缩小右边界,如果mid不满足判断条件,说明跳跃距离不够缩小左边界,最终找到的target=left(或者right-1)

#include <bits/stdc++.h>using namespace std;typedef long long ll;
const int N=1e5+10;
int a[N],prefix[N],n,x;bool check(int y){//是否满足任意长度为y的区间高度和大于等于2*x //任意区间从1开始,n-1-y+1结束for(int i=1;i<=n-y;i++){//[i,i+y-1]区间和 if(prefix[i+y-1]-prefix[i-1]<2*x)	return false;} return true;
}int main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);cin>>n>>x;for(int i=1;i<=n-1;i++){cin>>a[i];prefix[i]=prefix[i-1]+a[i];} int left=1,right=n-1,res=0;//左闭右闭while(left<=right){int mid=left+((right-left)>>1);if(check(mid)){right=mid-1;//res=mid;}else	left=mid+1;} cout<<left;//cout<<res;return 0;
}
2023冶炼金属

不用二分(不是最小值最大化这种,因为x成立,x-1不一定成立,不是单调的),就是多个集合取交集,Vmin=max(),Vmax=min()

2017分巧克力

注意
(1)这题是最小值最大化,满足条件left=mid+1,所以最终输出left-1(永远比最终结果多一)或者right(可以看最后两种情况,left==right时,若mid满足条件,left=mid+1结束循环,若mid不满足条件,肯定比key多1,right=mid-1=key)

#include <bits/stdc++.h>using namespace std;
typedef pair<int,int> PII; //或者直接开两个数组
const int N=1e5+10;
PII p[N];
int n,k;bool check(int mid){int sum=0;for(int i=0;i<n;i++){sum+=(p[i].first/mid)*(p[i].second/mid);if(sum>=k)	return true;}return false;
}int main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);cin>>n>>k;for(int i=0;i<n;i++){cin>>p[i].first>>p[i].second;}int left=1,right=1e5,mid,max,res=0;while(left<=right){mid=left+((right-left)>>1);if(check(mid)){left=mid+1;//res=mid;}else	right=mid-1;}cout<<right;//cout<<res;return 0;
}
2022技能升级

学习:
(1)暴力用max_element()函数获取地址,int pos=max_element-a获取索引可得40分,换成优先队列priority_queue可得60分
(2)满分为二分答案思想,但跟之前不一样,不是题目问什么就是寻找什么目标值,而要转换一下,寻找到一个能下降到的最低攻击力x,使得大于x的攻击力下降次数和<m次,x+1肯定也成立,所以为最大值最小化,得到x后可以得到下降次数,进而用等差数列得到大于x的攻击力和,再加上剩余次数*x即可
(3)加法和乘法时刻要想到显示转换为long long

#include <bits/stdc++.h>using namespace std;
typedef long long ll;
const int N=1e5+10;
int n,m,a[N],b[N],x;bool check(int x){ll cnt=0;for(int i=0;i<n;i++){if(a[i]>x){cnt+= ceil((double)(a[i]-x)/b[i]); //攻击力下降到x的总次数,向上取整 if(cnt>m)	return false;		}}return true;
}ll sum(int a,int cnt,int b){ //a:首项,cnt:项数, b:差,d:末项 int d=a-b*(cnt-1);ll res=(ll)(a+d)*cnt>>1; //记得显示转换return res;
}int main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);cin>>n>>m;for(int i=0;i<n;i++){cin>>a[i]>>b[i];}int left=0,right=1e6;while(left<=right){int mid=left+((right-left)>>1);if(check(mid)){right=mid-1;x=mid;}else	left=mid+1;}//x=left; //最后赋值或者在if里面赋值都一样ll res=0,cnt=0;for(int i=0;i<n;i++){if(a[i]>x){ll now=ceil((double)(a[i]-x)/b[i]);cnt+=now;res+=sum(a[i],now,b[i]); //等差数列求和算攻击力和 }}res+=(ll)(m-cnt)*x;//显示转换cout<<res;return 0;
} 

相关文章:

蓝桥杯备赛 Day8 二分

二分 1.要点 选取左闭右闭,[left,right] (1)二分查找&#xff1a;有序数组&#xff0c;且无重复元素寻找目标值key int left0,rightn-1,res-1;//未找到返回-1 while(left<right){int midleft((right-left)>>1); //注意右边括号&#xff0c;号优先于>>if(a[mi…...

CMMI5:请说明如何根据评价准则选择最佳解决方案?

一、明确评价准则及权重分配 确定评价准则&#xff1a;首先要清晰地列出所有相关的评价准则&#xff0c;这些准则通常涵盖多个方面&#xff0c;比如与项目目标的契合度&#xff08;包括功能需求满足程度、性能需求达标情况、对项目进度的影响等&#xff09;、技术可行性&#…...

<2.20>Leetcode哈希、双指针

还可以用双指针的做法 我们要找等于9 排序后从两边开始左右指针 2 3 7 9 如果29>9那么9肯定不能要 去掉 左边也一样 2 3 5 6 26小于9 那么2肯定不能要 去掉 package Leetcode; import java.util.*;public class 两数之和 {public int[] twoSum(int[] nums,int target…...

本2硕9电子科学专业,想走linux或是嵌入式,要具体学哪些技术

​今天给大家分享的是一位粉丝的提问&#xff0c;本2硕9电子科学专业&#xff0c;想走linux或是嵌入式&#xff0c;要具体学哪些技术 接下来把粉丝的具体提问和我的回复分享给大家&#xff0c;希望也能给一些类似情况的小伙伴一些启发和帮助。 同学提问&#xff1a; 你好&…...

《鸿蒙开发-答案之书》获取视频第一帧和视频时间

《鸿蒙开发-答案之书》获取视频第一帧和视频时间 /*** 获取视频信息**let result await MySightUtil.getSightInfo(this.sightUri);*let base64 : string result[0];*let duration : number result[1]** param uri 视频地址* returns 第一个数据是缩略图 base64 字符串&…...

计算机科学与技术

计算机科学是一个庞大且关联性强的学科体系&#xff0c;初学者常面临以下痛点&#xff1a; - **知识点零散**&#xff1a;容易陷入"只见树木不见森林"的学习困境 - **方向不明确**&#xff1a;面对海量技术栈不知从何入手 - **体系缺失**&#xff1a;难以建立完整…...

vxe-table 如何实现跟 Excel 一样的数值或金额的负数自动显示红色字体

vxe-table 如何实现跟 Excel 一样的数值或金额的负数自动显示红色字体&#xff0c;当输入的值为负数时&#xff0c;会自动显示红色字体&#xff0c;对于数值或者金额输入时该功能就非常有用了。 查看官网&#xff1a;https://vxetable.cn gitbub&#xff1a;https://github.co…...

【Word转PDF】在线Doc/Docx转换为PDF格式 免费在线转换 功能强大好用

在日常办公和学习中&#xff0c;将Word文档转换为PDF格式的需求非常普遍。无论是制作简历、撰写报告还是分享文件&#xff0c;都需要确保文档格式在不同设备上保持一致。而小白工具的“Word转PDF”功能正是为此需求量身打造的一款高效解决方案。 【Word转PDF】在线Doc/Docx转换…...

AF3 _find_template_in_pdb 函数解读

AlphaFold3 中templates模块的_find_template_in_pdb函数用于在 mmCIF 文件中查找与给定模板序列匹配的链,通过三步匹配策略确保找到最佳的模板链。 源代码: def _find_template_in_pdb(template_chain_id: str,template_sequence: str,mmcif_object: mmcif_parsing.MmcifO…...

陶瓷膜分离技术保障食品工业原料用水‌安全

陶瓷膜分离技术在食品工业中应用广泛&#xff0c;尤其是在保障原料用水的安全性方面发挥着重要作用。下面将从几个方面介绍陶瓷膜分离技术如何保障食品工业原料用水的安全&#xff1a; 高效过滤杂质&#xff1a;陶瓷膜具有非常细小的孔径(通常在纳米级别)&#xff0c;能够有效去…...

蓝桥杯 2.基础算法

蓝桥杯 2.基础算法 文章目录 蓝桥杯 2.基础算法基础算法时空复杂度枚举模拟编程11-16递归编程17进制转换编程18-19前缀和编程20-22差分编程23-27离散化贪心编程28-37二分双指针编程38-45构造编程46-49位运算编程50-55 排序冒泡排序选择排序插入排序快速排序归并排序编程56-65 基…...

ESP32-S3模组上兼容SCCB总线与I2C总线的解决方案(2)

接前一篇文章:ESP32-S3模组上兼容SCCB总线与I2C总线的解决方案(1) 二、问题求解 上一回说明了本系列文章的背景、所遇问题,以及乐鑫官方给出的解决方案,见以下测试用例: TEST_CASE("Camera driver uses an i2c port initialized by other devices test", &qu…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_os_specific_init函数

ngx_os_specific_init 声明在 src/os/unix/ngx_os.h ngx_int_t ngx_os_specific_init(ngx_log_t *log); 定义在 src\os\unix\ngx_linux_init.c ngx_int_t ngx_os_specific_init(ngx_log_t *log) {struct utsname u;if (uname(&u) -1) {ngx_log_error(NGX_LOG_ALERT, log,…...

Go 自动升级依赖版本

&#x1f680; Go 自动升级依赖版本 在 Go 语言项目中&#xff0c;依赖管理使用 Go Modules&#xff08;go.mod 和 go.sum&#xff09;。如果想要自动升级依赖&#xff0c;可以使用以下方法。 1. 方式 1&#xff1a;升级所有依赖 go get -u ./...&#x1f539; 作用&#xff…...

fps僵尸:12.丧尸伤害检测

文章目录 设计丧尸攻击时启用伤害检测&#xff0c;攻击结束后取消伤害检测 思路需要在攻击动画中 调用&关闭伤害检测 实现注解动画通知&#xff1a;绑定动画与蓝图 设计 丧尸攻击时启用伤害检测&#xff0c;攻击结束后取消伤害检测 思路 需要在攻击动画中 调用&关闭…...

支持向量机(SVM)在 NLP 中的使用场景

支持向量机(Support Vector Machine, SVM)是一种强大的监督学习算法,广泛应用于分类任务中。由于其出色的分类性能和高效的计算特点,SVM 已经成为自然语言处理(NLP)领域中的一种经典模型。SVM 在 NLP 中的应用非常广泛,尤其在文本分类任务中,表现出色。 本文将探讨 SV…...

Linux中的Ctrl+C与Ctrl+Z

CtrlC与CtrlZ的区别 在Linux中&#xff0c;当我们在执行一个命令运行代码时&#xff0c;由于运行时间过长或中途出现报错&#xff0c;此时&#xff0c;我们可能需要终止该操作&#xff0c;这时候&#xff0c;该使用CtrlC还是CtrlZ呢&#xff1f; 1、CtrlC CtrlC&#xff1a;终…...

【深度学习】手写数字识别任务

数字识别是计算机从纸质文档、照片或其他来源接收、理解并识别可读的数字的能力&#xff0c;目前比较受关注的是手写数字识别。手写数字识别是一个典型的图像分类问题&#xff0c;已经被广泛应用于汇款单号识别、手写邮政编码识别等领域&#xff0c;大大缩短了业务处理时间&…...

go语言 创建kratos框架工程

go语言 创建kratos框架工程 1、准备 1.1、系统 只支持macos和linux系统&#xff0c; 这里主要是macos&#xff08;linux类似&#xff09; 1.2、需要的环境 1.2.1、go语言环境 $ brew install go # 会安装最新的go版本 $ go env -w GO111MODULEon # 设置go的环境1.2.2、 …...

Linux-GlusterFS操作子卷

文章目录 分布式卷添加卷分布式卷删除子卷删除总卷 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Linux专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年02月20日19点30分 分布式卷添加卷 Node1上进行操作 扩容 #服务器端 gluster volu…...

修改阿里云服务器内网ip

运维同事问能不能改我自己的服务内网ip&#xff0c; 买了一台服99元服务器&#xff0c;以为不能结果&#xff0c;结果还真改成功了&#xff0c; 分享一下经验。 首先最后关闭服务器-关机&#xff0c;必须要关闭服务 访问vpc控制台&#xff0c;就是要新建立一个网络 https://…...

鸿蒙与跨端迁移的重要性

鸿蒙操作系统&#xff08;HarmonyOS&#xff09;是由华为公司开发的一款面向未来的全场景分布式操作系统。它旨在提供一个统一的平台&#xff0c;支持各种设备之间的无缝协作和数据共享&#xff0c;从而为用户提供更加连贯和高效的体验。在鸿蒙的生态系统中&#xff0c;跨端迁移…...

XML XML约束 二、DTD

1 什么是DTD DTD&#xff08;Document Type Definition&#xff09;&#xff0c;文档类型定义&#xff0c;用来约束XML文档。例如要求xml文档的根元素必须是<students>&#xff0c;在<students>元素下可以包含0~n个<student>元素&#xff0c;每个<studen…...

用DeepSeek零基础预测《哪吒之魔童闹海》票房——从数据爬取到模型实战

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 **一、为什么要预测票房&#xff1f;****二、准备工作****三、实战步骤详解****Step 1&#xff1a;数据爬取与清洗&am…...

医院管理系统方案-基于蓝牙室内定位技术的院内智能导航系统:技术详解、功能设计及核心优势

文面向IT技术员、医院信息化负责人及物联网应用开发者&#xff0c;本文介绍了一款基于蓝牙室内定位技术的智能导航系统。该系统通过高精度定位与智能路径规划&#xff0c;极大提升了患者就医体验与医院运营效率。 如需获取院内智能导航系统技术文档可前往文章最下方获取&#x…...

ref() 和 reactive()响应性 浅解

文章目录 1. ref() 和 reactive() 的区别2. 解构 详解2.1. 什么是解构2.2. 解构避免丢失响应性的办法2.2.1. 解决方案&#xff1a;toRefs() 保持响应性2.2.2. 解决方案&#xff1a; toRef()保持响应性 3. 最佳实践 在 Vue 3 中&#xff0c;ref() 和 reactive() 都是用于响应式数…...

聊一聊vue如何实现角色权限的控制的

大家好&#xff0c;我是G探险者。 关于角色与权限控制&#xff0c;通常是分为两大类&#xff1a;一种是菜单权限&#xff1b;一种是操作权限。 菜单权限是指&#xff0c;每个角色对应着可以看到哪些菜单&#xff0c;至于每个菜单里面的每个按钮&#xff0c;比如增删改查等等这类…...

TensorFlow深度学习实战——构建卷积神经网络实现CIFAR-10图像分类

TensorFlow深度学习实战——构建卷积神经网络实现CIFAR-10图像分类 0. 前言1. CIFAR-10 数据集介绍2. CIFAR-10 图像分类3. 提升模型性能3.1 增加网络深度3.2 数据增强 4. 模型测试相关链接 0. 前言 我们已经学习了卷积神经网络 (Convolutional Neural Network, CNN) 的基本概…...

服务器创建conda环境并安装使用jupyter

1.创建conda环境 conda create --name myenv python3.8 conda activate myenv其中 myenv 是您想要创建的环境名称&#xff0c;可以根据需要替换为其他名称。2.安装juypter conda install jupyter3.启动juypter jupyter notebook复制链接到浏览器打开 4.设置jupyter使用的 …...

形参和实参

形参&#xff08;形式参数&#xff09; 函数定义时指定的参数&#xff0c;形参是用来接收数据的&#xff0c;函数定义时&#xff0c;系统不会为形参申请内存&#xff0c;只有当 函数调用时&#xff0c;系统才会为形参申请内存。主要用于存储实际参数&#xff0c;并且当函数返…...