【蓝桥】二分法

二分法

简介:

网上模板很多,看得眼花缭乱,搞得不知道用哪种好,我自己就用这种吧,这是前几天看那道冶炼金属那题看到得模板,这个模板应该也适用于很多题了(闭区间)

  • 寻找靠左的数
while(l<=r)
{
    int mid=l+((r-l)>>1);
    if(a[mid]>=x)r=mid-1;
    else l=mid+1;
}
if(a[l]==x)return l;
else return -1;

在这里插入图片描述
在这里插入图片描述

由上面的图示可以看成,如果是寻找左边的数最终的while(l<=r)最终结束的条件是r在左侧,而l在右侧,因此q[l]==x,那么我们就找到了我们想要且靠左的数的位置

  • 寻找靠右的数
while(l<=r)
{   
    int mid=l+((r-l)>>1);
    if(a[mid]<=x)l=mid+1;
    else r=mid-1;
}
if(a[r]==x)return r;
else return -1;

在这里插入图片描述
在这里插入图片描述

由这个图示可知,如果要寻找右边的数,最终while(l<=r)的结束条件是r在左侧,l在右侧,那么q[r]==x的话,r就是我们找的靠右侧的数的位置

例题:

【洛谷】P1102 A-B 数对

A-B 数对

题目背景

出题是一件痛苦的事情!

相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!

题目描述

给出一串正整数数列以及一个正整数 C C C,要求计算出所有满足 A − B = C A - B = C AB=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。

输入格式

输入共两行。

第一行,两个正整数 N , C N,C N,C

第二行, N N N 个正整数,作为要求处理的那串数。

输出格式

一行,表示该串正整数中包含的满足 A − B = C A - B = C AB=C 的数对的个数。

样例 #1

样例输入 #1

4 1
1 1 2 3

样例输出 #1

3

提示

对于 75 % 75\% 75% 的数据, 1 ≤ N ≤ 2000 1 \leq N \leq 2000 1N2000

对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 2 × 1 0 5 1 \leq N \leq 2 \times 10^5 1N2×105 0 ≤ a i < 2 30 0 \leq a_i <2^{30} 0ai<230 1 ≤ C < 2 30 1 \leq C < 2^{30} 1C<230

2017/4/29 新添数据两组

思路:

这题先走了个弯路,即排序后,先打算固定一个数,然后看后面的数减去前面的数,如果等于c,则记一次数,然而这种方法就是常说的暴力法,数据量大的时候会超时,我们的计算机1s内能算1e7次到1e8次,超过这个数必然超时了

因此正解是利用二分,先移项,A=B+C,C是固定的,那么我们去遍历数组,数组的每一项都在每一次循环作为B,然后加上C的得到数A,然后在去数组中寻找A的位置,找到1个加入答案,没找到就不加,注意二分一定要先排序排序排序,还有就是我们在数据范围很大的时候一定要开long long ,如果判断不准,那就开着long long

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL sum=0;
LL bserach1(LL q[],LL n,LL a)
{
   LL l=0,r=n-1;
   LL mid=l+r>>1;
   
   while(l<=r)
   {
       mid=l+r>>1;
       if(q[mid]>=a){r=mid-1;}
       else l=mid+1;
   }
   if(q[l]==a)return l;
   else return -1;
}
LL bserach2(LL q[],LL n,LL a)
{
   LL l=0,r=n-1;
   LL mid=l+r>>1;

   while(l<=r)
   {
       mid=l+r>>1;
       if(q[mid]<=a){l=mid+1;}
       else r=mid-1;
   }
   if(q[r]==a)return r;
   else return -1;
}
int main()
{
    LL n=0,c=0;LL q[1000000]={0};
    cin>>n>>c;
    for(LL i=0;i<n;i++)cin>>q[i];
    sort(q,q+n);
    LL res1=0,res2=0;
    for(LL i=0;i<n;i++)
    {   
        LL a=q[i]+c;
        res1=bserach1(q,n,a);
        if(res1==-1)continue;
        else
        {
         res2=bserach2(q,n,a);
        }
        sum+=(res2-res1+1);
    }
    cout<<sum;
    return 0;
}

交完后发现#4 RE了,一直不知道为什么,后来问了学长才知道是初始化的原因。

RE的错误点一般是在和溢出有关,数组溢出,还有就是未初始化,未初始化这个数可能会很大,导致溢出

所以注意一定要初始化!!!初始化!!!初始化!!!

[蓝桥杯 2023 省 B] 冶炼金属

[蓝桥杯 2023 省 B] 冶炼金属

题目描述

小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V V V V V V 是一个正整数,这意味着消耗 V V V 个普通金属 O 恰好可以冶炼出一个特殊金属 X,当普通金属 O 的数目不足 V V V 时,无法继续冶炼。

现在给出了 N N N 条冶炼记录,每条记录中包含两个整数 A A A B B B,这表示本次投入了 A A A 个普通金属 O,最终冶炼出了 B B B 个特殊金属 X。每条记录都是独立的,这意味着上一次没消耗完的普通金属 O 不会累加到下一次的冶炼当中。

根据这 N N N 条冶炼记录,请你推测出转换率 V V V 的最小值和最大值分别可能是多少,题目保证评测数据不存在无解的情况。

输入格式

第一行一个整数 N N N,表示冶炼记录的数目。

接下来输入 N N N 行,每行两个整数 A , B A,B A,B,含义如题目所述。

输出格式

输出两个整数,分别表示 V V V 可能的最小值和最大值,中间用空格分开。

样例 #1

样例输入 #1

3
75 3
53 2
59 2

样例输出 #1

20 25

提示

【样例说明】

V = 20 V=20 V=20 时,有: ⌊ 75 20 ⌋ = 3 , ⌊ 53 20 ⌋ = 2 , ⌊ 59 20 ⌋ = 2 \left\lfloor\frac{75}{20}\right\rfloor=3,\left\lfloor\frac{53}{20}\right\rfloor=2,\left\lfloor\frac{59}{20}\right\rfloor=2 2075=3,2053=2,2059=2,可以看到符合所有冶炼记录。

V = 25 V=25 V=25 时,有: ⌊ 75 25 ⌋ = 3 , ⌊ 53 25 ⌋ = 2 , ⌊ 59 25 ⌋ = 2 \left\lfloor\frac{75}{25}\right\rfloor=3,\left\lfloor\frac{53}{25}\right\rfloor=2,\left\lfloor\frac{59}{25}\right\rfloor=2 2575=3,2553=2,2559=2,可以看到符合所有冶炼记录。

且再也找不到比 20 20 20 更小或者比 25 25 25 更大的符合条件的 V V V 值了。

【评测用例规模与约定】

对于 30 % 30 \% 30% 的评测用例, 1 ≤ N ≤ 1 0 2 1 \leq N \leq 10^{2} 1N102

对于 60 % 60 \% 60% 的评测用例, 1 ≤ N ≤ 1 0 3 1 \leq N \leq 10^{3} 1N103

对于 100 % 100 \% 100% 的评测用例, 1 ≤ N ≤ 1 0 4 1 \leq N \leq 10^{4} 1N104 1 ≤ B ≤ A ≤ 1 0 9 1 \leq B \leq A \leq 10^{9} 1BA109

蓝桥杯 2023 省赛 B 组 C 题。

==思路:==这题用二分是可行的,用两次二分,一次寻找靠左边的数,即我们的vmin,另一次则寻找靠右边的数,即我们的vmax

#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 5;
int n;
int a[N], b[N];
bool check1(int v)
{
    for (int i = 0; i < n; i++)
    {
        if (a[i] / v > b[i])return false;
    }
    return true;
}
bool check2(int v)
{
    for (int i = 0; i < n; i++)
    {
        if (a[i] / v < b[i])return false;
    }
    return true;
}
int main()
{
    
    cin >> n;
    for (int i = 0; i < n; i++)cin >> a[i] >> b[i];
    int l = 0, r = 1e9, vmin = 0, vmax = 0;
    while (l <= r)
    {
        int mid = l + ((r - l) >> 1);
        if (check1(mid)) { vmin = mid; r = mid - 1; }
        else l = mid + 1;
    }
    l = 1, r = 1e9;
    while (l <= r)
    {
        int mid = l + ((r - l) >> 1);
        if (check2(mid)) { vmax = mid; l = mid + 1; }
        else r = mid - 1;
    }
    cout << vmin<< " " << vmax;
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

卷积神经网络(LeNet5实现对Fashion_MNIST分类

参考6.6. 卷积神经网络&#xff08;LeNet&#xff09; — 动手学深度学习 2.0.0 documentation (d2l.ai) ps&#xff1a;在这里预备使用pythorch 1.对 LeNet 的初步认识 总的来看&#xff0c;LeNet主要分为两个部分&#xff1a; 卷积编码器&#xff1a;由两个卷积层组成; …

ssm049基于Vue.js的在线购物系统的设计与实现+vue

在线购物系统 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于在线购物系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了在线购物系统&#xff0c;它彻底改…

Ubuntu快捷安装MySQL

更新包列表 sudo apt update 安装mysql sudo apt install mysql-server 启动mysql // 启动mysql sudo service mysql start// 关闭mysql sudo service mysql stop// 重启mysql sudo service mysql restart 连接mysql // 初始安装无密码&#xff0c;直接连接即可&#xf…

13.多通道视频流缓存以及显示架构

1 简介 多通道视频流缓存以及显示架构是一个在数字图像处理中很基础也很重要的一个架构。在图像拼接以及高分辨率图像显示方面应用范围较为广泛。本文将介绍一个四通道的图像显示。可以四个图像信息输入以及拼接到一个显示屏里面。使用的开发板为A7 2 框架图 架构图如下图所示…

Python杂记--使用asyncio构建HTTP代理服务器

Python杂记--使用asyncio构建HTTP代理服务器 引言基础知识代码实现 引言 本文将介绍 HTTP 代理的基本原理&#xff0c;并带领读者构建一个自己的 HTTP 代理服务器。代码中不会涉及到任何第三方库&#xff0c;全部由 asyncio 实现&#xff0c;性能优秀&#xff0c;安全可靠。 基…

云服务器安装Mysql、MariaDB、Redis、tomcat

前置工作 进入根目录 cd / 进入/user/local文件夹 上传压缩包 rz 压缩包 Mysql 1.下载并安装MySQL官方的 Yum Repository wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql-…

ssh爆破服务器的ip-疑似肉鸡

最近发现自己的ssh一直有一些人企图使用ssh暴力破解的方式进行密码破解.就查看了一下,真是网络安全太可怕了. 大家自己的服务器密码还是要设置好,管好,做好最基本的安全措施,不然最后只能沦为肉鸡. ssh登陆日志可以在/var/log下看到,ubuntu的话为auth.log,centos为secure文件 查…

设计模式代码实战-桥接模式

1、问题描述 小明家有一个万能遥控器&#xff0c;能够支持多个品牌的电视。每个电视可以执行开机、关机和切换频道的操作&#xff0c;请你使用桥接模式模拟这个操作。 输入示例 6 0 2 1 2 0 4 0 3 1 4 1 3 输出示例 Sony TV is ON TCL TV is ON Switching Sony TV channel S…

Oracle 19c RAC 补丁升级 补丁回退

补丁升级流程 补丁升级 停止集群备份家目录 两节点分别操作 cd /u01/app/19.3.0/grid/bin/ crsctl stop crs tar -zcvf /u01/app.tar.gz /u01/app /u01/app/19.0.0/grid/bin/crsctl start crs 两节点OPatch替换 --- 表示 root 用户&#xff0c;$ 表示 Oracle 用户提示符&#…

NLP_知识图谱_图谱问答实战

文章目录 图谱问答NERac自动机实体链接实体消歧 多跳问答neo4j_graph执行流程结构图![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1577c1d9c9e342b3acbf79824aae980f.png)company_data![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/20f567d877c743b…

python爬虫-----Selenium (第二十二天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

(一)基于IDEA的JAVA基础15

还是先来说一下: Arrays工具类 Arrays是java.util包提供的工具类 提供了操作数组的方法&#xff0c;如排序,查询等。 如排序(升序)使用sort方法 语法: Arrays.sort(数组名)&#xff1b; 还是直接写来看看: public class Test01 { public static void main(String[] args)…

攻防世界12-baby_web

12-baby_web 题目说想想初始页面是哪个&#xff0c;一般都是index.php&#xff0c;然后如题分析即可。 我们在链接后面拼接上/index.php&#xff0c;返回后发现界面又回到了1.php&#xff0c;有可能是重定向。 我们点击检查-网络&#xff0c;发现没有index的请求&#xff0c;…

系统架构最佳实践 -- 供应链系统架构

供应链系统是现代企业管理中不可或缺的一部分&#xff0c;它涉及到从原材料采购到产品销售的整个生产流程。一个高效的供应链系统可以帮助企业实现成本控制、库存优化和客户满意度提升等目标。在本文中&#xff0c;我们将讨论供应链系统的设计与实践。 一、供应链系统设计 业务…

数字乡村创新实践探索农业现代化与乡村振兴新路径:科技赋能农村全面振兴与农民幸福新篇章

随着信息技术的飞速发展&#xff0c;数字乡村成为推动农业现代化与乡村振兴的重要战略举措。科技赋能下的数字乡村创新实践&#xff0c;不仅提升了农业生产的智能化水平&#xff0c;也为乡村治理和农民生活带来了翻天覆地的变化。本文旨在探讨数字乡村创新实践在农业现代化与乡…

数据库数据恢复—Sql Server数据库文件丢失如何恢复数据?

服务器数据恢复环境&#xff1a; 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5&#xff0c;划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检&#xff1a; 由于未知原因&#xf…

Spring框架中的单例bean是线程安全的吗?

无状态bean&#xff1a; 无状态的Bean的行为不受其内部状态的影响&#xff0c;每次调用都是基于传入的参数进行计算&#xff0c;而不依赖于任何之前的状态。 (例如上面例子&#xff1a;userService是不能修改的&#xff0c;是无状态的bean) 因此&#xff1a; Spring框架中的…

基于51单片机的无线病床呼叫系统设计—LCD1602显示

基于51单片机的无线病床呼叫系统 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.病人按下按键&#xff0c;LCD1602显示对应的床位号&#xff1b; 2.多人同时呼叫&#xff0c;显示屏同时显示&#xf…

Vitis HLS 学习笔记--优化循环启动间隔(II)

目录 1. 概述 2. 常规矩阵乘法 3. 数据依赖性和内存访问模式 4. 优化循环 5. 总结 1. 概述 Initiation Interval&#xff08;II&#xff09;定义为启动连续操作之间的时间间隔&#xff0c;以时钟周期为单位。低的II是高性能和高资源利用率的关键。 较高的II意味着在单位…

《手把手教你》系列基础篇(八十六)-java+ selenium自动化测试-框架设计基础-Log4j实现日志输出(详解教程)

1.简介 自动化测试中如何输出日志文件。任何软件&#xff0c;都会涉及到日志输出。所以&#xff0c;在测试人员报bug&#xff0c;特别是崩溃的bug&#xff0c;一般都要提供软件产品的日志文件。开发通过看日志文件&#xff0c;知道这个崩溃产生的原因&#xff0c;至少知道触发崩…