蓝桥杯备赛 day 2 —— 二分算法(C/C++,零基础,配图)

目录

🌈前言:

📁 二分的概念

📁 整数二分

📁 二分的模板

📁 习题

📁 总结


🌈前言:

        这篇文章主要是准备蓝桥杯竞赛同学所写,为你更好准备蓝桥杯比赛涉及的算法知识点。不知道你是否苦恼于不知算法从何学起,苦恼于网上资料稀少,或者复杂难懂,这篇文章就是帮助这部分同学的。

        下面整理了蓝桥杯考点大纲:

               蓝桥杯考点大纲

  

        通过上图,我们知道二分在蓝桥杯比赛中也是比较重要的,所以我们这里就单独写了一篇文章介绍,不仅是因为比较重要,而且二分算法对于刚接触算法的人来说比较复杂,易错点较多,需要不断调试。

📁 二分的概念

        二分,字面意思就是通过判断是否满足条件将区间分成两份。通常的比如大于等于 或者  小于等于.......

📁 整数二分

        对于整数二分,我们可以分成两中类型 :

        1. [L ,Mid - 1] 和 [Mid , R] :所求答案在Mid 右边

        2. [L , Mid ] 和 [Mid + 1 , R] :所求答案在Midz左边

        这两种不同类型的区间,是由于判断条件不同形成的。

📁 二分的模板

        为了大家更好的做题,已经比赛中更好的利用时间,这里提供了整数二分的模板,以及浮点数二分的模板。

1) 区间[L , R] 划分成[L,Mid] 和 [Mid+1 , R]
bool check(int x)
{...    //检查x是否满足某种条件
}
int bearch_1(int l,int r)
{while(l < r){int mid = (l + r ) / 2;if(check(mid))r = mid;elsel = mid + 1;}return 1;
}2) 区间[L , R] 划分成[L,Mid-1] 和 [Mid , R]
bool check(int x)
{...    //检查x是否满足某种条件
}
int bearch_2(int l,int r)
{while(l < r){int mid = (l + r + 1 ) / 2;if(check(mid))l = mid;elser = mid - 1;}return 1;
}

        对于浮点数二分,并不需要关注+-1的问题,所以相对于整数二分来说,简单一些。当然一般来说,对于浮点数二分,我们需要保证精确度在1e-6(1的-6次方)。

bool check((int x)
{...    //检查x是否满足条件
}int bearch_1(int l,int r)
{while(r - l > 1e-6 ){int mid = (l + r ) / 2;if(check(mid))r = mid;elsel = mid ;}return 1;
}

📁 习题

1. 数的范围 789. 数的范围 - AcWing题库

        这道题其实就是一道非常经典的二分题目,首先我们找出左边第一次出现的x,再找出右边第一次出现的x,如果没有找到,则输出-1 -1。

#include <iostream>
#include <cstdio>using namespace std;const int N = 100010;int q[N];
int n,m;int main()
{cin >> n>>m;for(int i=0;i<n;i++)cin>>q[i];while(m--){int x;cin>>x;int l = 0;int r = n-1;while(l < r){int mid = (l + r) >> 1;if(q[mid] >= x)r = mid;elsel = mid + 1;}if(q[l] != x)printf("-1 -1\n");else{printf("%d ",l);r = n-1;while(l < r){int mid = (l + r + 1) >> 1;if(q[mid] <= x)l = mid;elser = mid -1;}printf("%d\n",l);}}return 0;
}

2.数的三次方根 790. 数的三次方根 - AcWing题库

        我们从数据范围当做区间,通过二分找出浮点数n的三次方根。

#include <iostream>
#include <cstdio>using namespace std;int main()
{double x ;cin >> x;double l = -10000,r =10000;while(r -l > 1e-8){double m = (r + l) /2;if(m * m * m >= x)r = m;elsel = m;}printf("%lf",l);return 0;
}

📁 总结

    以上,我们就对二分在蓝桥杯中的知识点进行了讲解,并针对性的讲解了例题,当然这也只是帮你更好的理解这些算法知识,想要学好算法,还需要不断地刷题练习,这里推荐到洛谷,acwing等网站进行练习,比如你看完了这篇文章,做回了例题习题,就可以上这些网站进行想应的练习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/630372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0到1:实验室设备借用小程序开发笔记

概论 实验室设备借用小程序&#xff0c;适合各大高校&#xff0c;科技园区&#xff0c;大型企业集团的实验室设备借用流程, 通过数字化的手段进一步提升相关单位设备保障水平&#xff0c;规范实验室和设备管理&#xff0c;用户通过手机小程序扫描设备的二维码&#xff0c;可以…

深入解析:如何使用Java、SpringBoot、Vue.js和MySQL构建课表管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

VS代码生成工具ReSharper v2023.3正式发布——支持C# 12

实质上&#xff0c;ReSharper特征可用于C#&#xff0c;VB.net&#xff0c;XML&#xff0c;Asp.net&#xff0c;XAML&#xff0c;和构建脚本。 使用ReSharper&#xff0c;你可以进行深度代码分析&#xff0c;智能代码协助&#xff0c;实时错误代码高亮显示&#xff0c;解决方案范…

JavaScript基础(27)_内联样式的获取和修改、获取元素当前显示的样式

内联样式的获取和修改 获取元素的内联样式&#xff1a; 语法&#xff1a;元素.style.样式名 注意&#xff1a;通过style属性设置和读取的都是内联样式&#xff0c;无法读取样式表中的样式。 修改元素的内联样式&#xff1a; 语法&#xff1a;元素.style.样式名 样式值比如…

并发编程之深入理解AQS

目录 什么是AQS&#xff1f; AQS的特性 AQS总结 什么是AQS&#xff1f; java.util.concurrent包中的大多数同步器实现都是围绕着共同的基础行为&#xff0c;比如等待队列、条件队列、独占获取、共享获取等&#xff0c;而这些行为的抽象就是基于AbstractQueuedSynchronizer&a…

WordPress后台仪表盘自定义添加删除概览项目插件Glance That

成功搭建WordPress站点&#xff0c;登录后台后可以在“仪表盘 – 概览”中看到包括多少篇文章、多少个页面、多少条评论和当前WordPress版本号及所使用的主题。具体如下图所示&#xff1a; 但是如果我们的WordPress站点还有自定义文章类型&#xff0c;也想在概览中显示出来应该…

【经验分享】美赛报名以及注册方法-以2024年美赛为例

1 进入美赛官网 首先点击COMAP的官网链接&#xff1a; https://www.comap.com/然后选择Contests目录下的MCM/ICM 选择 Learn More and Register 然后选择 register for contest 接下来开始注册环节&#xff0c;注册分为两个步骤&#xff1a;顾问&#xff08;指导教师&#xf…

Jsqlparser简单学习

文章目录 学习链接模块访问者模式parser模块statement模块Expression模块deparser模块 测试TestDropTestSelectTestSelectVisitor 学习链接 java设计模式&#xff1a;访问者模式 github使用示例参考 测试 JSqlParser使用示例 JSqlParse&#xff08;一&#xff09;基本增删改…

GitHub API使用--获取GitHub topic

目录标题 技术简介申请token简单使用使用Java调用获取GitHub topic总结 技术简介 GitHub API是一个功能强大的工具&#xff0c;为开发者提供了访问和操作GitHub平台上资源的途径。无论是构建个人工具&#xff0c;集成自动化流程&#xff0c;还是开发应用程序&#xff0c;GitHu…

【Git】任何位置查看git日志

需求 现需要查看指定项目中的某个文件的 Git 日志。如有 项目代码 jflowable &#xff0c;需要查看其下文件 D:\z_workspace\jflowable\src\main\java\com\xzbd\jflowable\controller\TestController.java 的日志。 分析 一般的思路是&#xff0c;进入 jflowable 项目&#…

ES 之索引和文档

本文主要介绍ES中的数据组成结构单元。 一、文档(Document) 1、概念 ES的数据存储单元是面向文档的&#xff0c;文档是所有数据存储&#xff0c;搜索的最小单元。 你可以把ES中的文档对应成mysql中的一条条数据记录。到时候你存进ES的数据就是一个个文档。 文档存入ES是序列…

BRC20通证的诞生与未来展望!如何导入bitget教程

BRC-20通证是什么&#xff1f; 嘿&#xff01;你知道BRC-20通证吗&#xff1f;这可是比特币区块链上的超级明星&#xff01;它们不依赖智能合约&#xff0c;而是把JSON代码刻在聪上&#xff0c;聪可是比特币的最小单位哦&#xff01;就像在比特币的乐高积木上盖房子&#xff0…

dubbo入门案例!!!

入门案例之前我们先介绍一下&#xff1a;zookeeper。 Zookeeper是Apacahe Hadoop的子项目&#xff0c;可以为分布式应用程序协调服务&#xff0c;适合作为Dubbo服务的注册中心&#xff0c;负责服务地址的注册与查找&#xff0c;相当于目录服务&#xff0c;服务提供者和消费者只…

自动驾驶轨迹规划之碰撞检测(一)

欢迎大家关注我的B站&#xff1a; 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 目录 1.碰撞检测的意义 2.安全走廊 3 计算几何 4 AABB与OBB 1.碰撞检测的意义 对于自动驾驶汽车或机器人的路径规划&#xff0c;碰撞检测是其…

Python 数据类型转换:数据世界的形态转换术

在 Python 中&#xff0c;数据类型转换是一项关键的技能。数据类型的转换使得我们能够在不同类型的数据之间进行转换和操作&#xff0c;提升了我们对数据的处理能力。本文将深入探讨 Python 中的数据类型转换&#xff0c;包括常见的数据类型、转换方法和使用技巧。 常见的数据类…

M1 MacOS下安卓虚拟化的最佳方案

categories: [VM] tags: MacOS VM 写在前面 一直想在桌面环境虚拟化安卓app, 但是看网上的推荐一直感觉不合胃口, 不是要花钱就是有广告, 想着找找开源的实现, 后来发现还是 Google 自家的产品用着舒服. 安装与配置 brew install android-studio然后随便开一个项目, 选默认…

通过Shell脚本登录MySQL,并执行MySQL命令

以下是一个通过Shell脚本登录MySQL 8并执行MySQL命令的示例&#xff1a; #!/bin/bash# MySQL服务器地址&#xff08;如果在同一台机器上&#xff0c;可以是localhost或127.0.0.1&#xff09; MYSQL_HOST"localhost"# MySQL服务器端口&#xff08;默认为3306&#xf…

阿赵UE学习笔记——10、Blender材质和绘制网格体

阿赵UE学习笔记目录   大家好&#xff0c;我是阿赵。   之前介绍了虚幻引擎的材质和材质实例。这次来介绍一个比较有趣的内置的Blender材质。   在用Unity的时候&#xff0c;我做过一个多通道混合地表贴图的效果&#xff0c;而要做过一个刷顶点颜色混合地表和水面的效果。…

C#封装服务

C#封装服务 新建服务项目&#xff1b;重构 OnStart 和 OnStop using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using S…

【Gradle】Maven-Publishing

使用Java开发完成一个模块或者一个基础框架需要提供给团队项目使用&#xff0c;这个时候有两种方式可提供&#xff0c;一是提供源码&#xff0c;二是提供编译构建好的jar包供使用&#xff0c;这个时候需要讲构建好的包发布到公司的私服&#xff08;公司maven仓库&#xff09;&a…