蓝桥杯题目中的二分查找

前言

众所周知蓝桥杯会暴力,那么拿奖也是很轻松,甚至拿省一,有些题甚至直接用暴力就是对的,二分查找就是暴力中常用的算法,这篇文章就用蓝桥杯中的题目去介绍如何用二分查找去解题,对于二分查找的基础知识我就不再多说了,网上有很多,也不难,了解基础的就可以了

分巧克力

题目链接:用户登录

题目描述

儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。

小明一共有 NN 块巧克力,其中第 ii 块是 Hi×WiHi​×Wi 的方格组成的长方形。为了公平起见,

小明需要从这 NN 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足:

  1. 形状是正方形,边长是整数;

  2. 大小相同;

例如一块 6x5 的巧克力可以切出 6 块 2x2 的巧克力或者 2 块 3x3 的巧克力。

当然小朋友们都希望得到的巧克力尽可能大,你能帮小明计算出最大的边长是多少么?

输入描述

第一行包含两个整数 N,KN,K (1≤N,K≤1051≤N,K≤105)。

以下 N 行每行包含两个整数 Hi,WiHi​,Wi​ (1≤Hi,Wi≤1051≤Hi​,Wi​≤105)。

输入保证每位小朋友至少能获得一块 1x1 的巧克力。

输出描述

输出切出的正方形巧克力最大可能的边长。

输入

2 10
6 5
5 6

输出

2

先看代码

#include<bits/stdc++.h>
using namespace std;
long long h[100005],w[100005];
long long k,n;
bool check(int x)
{long long sum=0;for(int i=0;i<n;i++){sum+=(h[i]/x)*(w[i]/x);  //当正方形的长度是x时,去遍历看这个x是否满足条件}if(sum>=k)return true;elsereturn false;
}
int main()
{cin>>n>>k;for(int i=0;i<n;i++){cin>>h[i]>>w[i];}long long max=0;long long l=1,r=100000,mid;  //r=100000就是巧克力的长和宽的最大值,然后在这个范围中找最大值while(l<=r){mid=(l+r)/2;if(check(mid)){max=mid;l=mid+1;}elser=mid-1;}cout<<max;return 0;
}

这道题二分查找就是再用暴力算法,它给出了k的最大值就是100000,巧克力的长度和宽度最大也是100000数据比较小可以直接用暴力;

冶炼金属

题目链接:用户登录

题意

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

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

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

输入格式

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

接下来输入 NN 行,每行两个整数 AA、BB,含义如题目所述。

输出格式

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

样例输入

3
75 3
53 2
59 2

样例输出

20 25

样例说明

当 V=20V=20 时,有:⌊7520⌋=3⌊2075​⌋=3,⌊5320⌋=2⌊2053​⌋=2,⌊5920⌋=2⌊2059​⌋=2,可以看到符合所有冶炼记录。

当 V=25V=25 时,有:⌊7525⌋=3⌊2575​⌋=3,⌊5325⌋=2⌊2553​⌋=2,⌊5925⌋=2⌊2559​⌋=2,可以看到符合所有冶炼记录。

且再也找不到比 2020 更小或者比 2525 更大的符合条件的 VV 值了。

提示

对于 3030% 的评测用例,1≤N≤1021≤N≤102。

对于 6060% 的评测用例,1≤N≤1031≤N≤103。

对于 100100% 的评测用例,1≤N≤1041≤N≤104,1≤B≤A≤1091≤B≤A≤109。

代码

#include<bits/stdc++.h>#define rep(i, a, b) for(int i = a; i < b; i++)using namespace std;
const int N = 1e4 + 10;
int n;int get(int a, int b)
{int l = 1, r = 1e9 + 1;while(l < r){int mid = l + r >> 1;if(a / mid <= b)r = mid;else l = mid + 1;}return r;
}int main()
{cin >> n;int minv = 1, maxv = 1e9;int a, b;rep(i, 0, n){scanf("%d%d", &a, &b);//对于所有的集合取交集minv = max(minv, get(a, b));maxv = min(maxv, get(a, b - 1) - 1);}cout << minv << " " << maxv;return 0;
}

它这道题用二分查找是找到了这一中比较巧妙的方法,这道题可以看我前一篇博客,不用二分也可以爆破出来,这道题就是一道找规律的题;

以下是大佬用数学公式推出来的然后用二分查找

1.根据题目有以下公式推导: 因为 ⌊A/V⌋=B⌊A/V⌋=B

有 B<=A/V<B+1B<=A/V<B+1

取倒数有 1/(B+1)<V/A<=1/B1/(B+1)<V/A<=1/B

两边同时乘AA: A/(B+1)<V<=A/BA/(B+1)<V<=A/B

2.这样,区间左边取A/(B+1)+1A/(B+1)+1最大值,右边取 A/BA/B最小值即可

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

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

相关文章

163 Linux C++ 通讯架构实战17,本地套接字整理对比,IPC:pipe,fifo,mmap,信号,本地套

IPC&#xff1a; Linux环境下&#xff0c;进程地址空间相互独立&#xff0c;每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到&#xff0c;所以进程和进程之间不能相互访问&#xff0c;要交换数据必须通过内核&#xff0c;在内核中开辟一块缓冲…

并发编程三大特性之可见性

一、什么是可见性&#xff1f; 可见性问题是基于CPU位置出现的&#xff0c;cpu处里速度非常快&#xff0c;相对CPU来说去主内存 获取数据这个事情太慢了&#xff0c;CPU就提供了 L1&#xff0c;L2&#xff0c;L3的三季缓存&#xff0c;每次去主内存拿完 数据后&#xff0c;数据…

MBTI职业性格测试:发现你的内在力量,探索职业新世界!

MBTI简介 MBTI是根据荣格的心理类型理论著成&#xff0c;已经成为权威的性格测试。 MBTI&#xff08;Myers-Briggs Type Indicator&#xff09;&#xff0c;是一种迫选型、自我报告式的性格评估测试&#xff0c;用以衡量和描述人们在获取信息、作出决策、对待生活等方面的心理…

【从零到一手撕脚手架 | 第五节】自定义命令行下载cli工具

【从零到一手撕脚手架 | 第五节】自定义命令行下载cli工具 Hello大家好我是⛄&#xff0c;之前我们已经成功搭建了一套Vue3的快速开发模板&#xff0c;提高我们搭建新项目的效率&#xff0c;但是当我们的模板逐渐增多&#xff0c;如果依然使用git clone的方式去下载模板较为繁琐…

使用LIKE进行模糊查询

查询包含字符‘e’的信息 % 代表不确定个数的字符&#xff08;零个或多个&#xff09; SELECT employee_id, first_name FROM employees WHERE first_name LIKE %e%; 查询以字符‘e’开头的字符 SELECT employee_id, first_name FROM employees WHERE first_name LIKE e%; _…

腾讯云2024年优惠券领取及使用常见问题

腾讯云作为国内领先的云计算服务提供商&#xff0c;经常会推出各种优惠活动&#xff0c;以此来吸引用户上云。其中&#xff0c;优惠券作为一种常见的促销方式&#xff0c;受到了众多用户的青睐。然而&#xff0c;在领取和使用优惠券的过程中&#xff0c;大家可能会遇到一些常见…

1.《C语言》—— [常见概念]

前言: C语言是学习编程的一门语言&#xff0c;C语言概念少&#xff0c;词汇少&#xff0c;包含了基本的编程元素&#xff0c;再后来的很多语言如&#xff08;C&#xff0c;Java&#xff09;等都参考了C语言&#xff0c;所以想要学好编程&#xff0c;C语言是必不可少的一门&…

77、WAF攻防——权限控制代码免杀异或运算变量覆盖混淆加密传参

文章目录 WAF规则webshell免杀变异 WAF规则 函数匹配 工具指纹 webshell免杀变异 php 传参带入 eval可以用assert来替换,assert也可以将字符串当作php代码执行漏洞 php 变量覆盖 php 加密 使用加密算法对php后门进行加密 php 异或运算 简化:无字符webshellP 无数字字母rc…

《米小圈上学记》——让孩子爱上阅读一点也不难!

阅读能力的培养是小学语文素质教育重要的组成部分&#xff0c;阅读能力的高低&#xff0c;直接关系到学生的理解能力、运用知识的能力以及表达能力的提升。提高小学生的阅读能力不仅关系到小学生语文素养的培养&#xff0c;而且对他们开阔视野、提高内涵、增加底蕴、放飞心灵有…

hibernate执行外部sql

开发背景 公司多年前项目&#xff0c;使用hibernate作为持久层&#xff0c;部分sql查询采用spring的JdbcTemplate&#xff0c;sql穿插在java代码中。因此&#xff0c;需要统一使用hibernate&#xff0c;并且sql部分需要类似Mybatis一样从文件中读取。由于引入Mybatis需要对项目…

哈希存节点,双dp数组存选和不选

小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连…

Linux:安装zabbix-agent被监控端(2)

本章是结合着上一篇文章的续作 Linux&#xff1a;部署搭建zabbix6&#xff08;1&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/137426966?spm1001.2014.3001.5501本章将在两台centos部署agent端&#xff0c;然后使用server进行连接监控 agent1 在1…

11、子串-滑动窗口最大值

题解&#xff1a; 双端队列是一种特殊的队列&#xff0c;允许你在队列的两端进行插入和删除操作。在滑动窗口问题中&#xff0c;我们使用它来存储可能是当前窗口最大值的元素的索引。 维护队列的顺序&#xff1a; 当新元素进入窗口时&#xff0c;我们将它与队列尾部的元素进…

RSA相关学习存档

什么是RSA&#xff0c;以及RSA算法&#xff1a; https://zhuanlan.zhihu.com/p/450180396 https://blog.csdn.net/m0_51607907/article/details/123884953 https://blog.csdn.net/firechungelaile/article/details/39974379 https://blog.csdn.net/lesczx/article/details/…

【LeetCode热题100】4. 寻找两个正序数组的中位数(二分)

一.题目要求 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 二.题目难度 困难 三.输入样例 示例 1&#xff1a; 输入&#xff1a;nums1 [1,3…

子集(迭代)(leetcode 78)

核心逻辑&#xff1a; 根据子数组包含的元素个数迭代&#xff1a; 现有子集的基础上通过添加这个新元素来翻倍子集的数量 f(n)2f(n−1) vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int>> ans;int i,j,k;ans.p…

《科技创业月刊》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答&#xff1a;问&#xff1a;《科技创业月刊》是什么级别的刊物&#xff1f; 答&#xff1a;省级&#xff0c;主管单位&#xff1a; 湖北省科学技术厅 &#xff1b;主办单位&#xff1a;湖北省科技信息研究院 问&#xff1a;《科技创业月刊》是c刊吗&#xff1f; 答&…

spring面试八股

常用的注册bean的方式 ComponentScan扫描到的service和Controller等的注解 Configration配置类或者是xml文件的定义。 spring中有几种依赖注入的方式 1.构造器注入。 2.setter方法注入。 3.使用field属性的方式注入。 applicationContext是什么 spring bean spring aop Aop…

Linux命令-dpkg-deb命令(Debian Linux下的软件包管理工具)

说明 dpkg-deb命令 是Debian Linux下的软件包管理工具&#xff0c;它可以对软件包执行打包和解包操作以及提 供软件包信息。 语法 dpkg-deb(选项)(参数)选项 -c&#xff1a;显示软件包中的文件列表&#xff1b; -e&#xff1a;将主控信息解压&#xff1b; -f&#xff1a;把…

java种Hutools常用方法

目录 一、依赖二、Convert三、DateUtil四、StrUtil五、ReflectUtil六、IdUtil七、RandomUtil八、BeanUtil九、JSONUtil Hutool是一个小而全的Java工具类库&#xff0c;通过静态方法封装&#xff0c;降低相关API的学习成本&#xff0c;提高工作效率&#xff0c;使Java拥有函数式…