冶炼金属 (第十四届蓝桥杯省赛C++ B组)详解(二分+推公式)

题目描述: 

小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。

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

现在给出了 N 条冶炼记录,每条记录中包含两个整数 A 和 B,这表示本次投入了 A个普通金属 O,最终冶炼出了 B 个特殊金属 X。

每条记录都是独立的,这意味着上一次没消耗完的普通金属 O不会累加到下一次的冶炼当中。

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

输入格式

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

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

输出格式

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

数据范围

对于 30% 的评测用例,1≤N≤10^2。
对于 60% 的评测用例,1≤N≤10^3。
对于 100% 的评测用例,1≤N≤10^4,1≤B≤A≤10^9。

输入样例:
3
75 3
53 2
59 2
输出样例:
20 25
样例解释

当 V=20 时,有:⌊75/20⌋=3,⌊53/20⌋=2,⌊59/20⌋=2,可以看到符合所有冶炼记录。

当 V=25 时,有:⌊75/25⌋=3,⌊53/25⌋=2,⌊59/25⌋=2,可以看到符合所有冶炼记录。

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


推公式思路: 

根据上述样例:V=75/3 = 25   假如我们在得到b的基础上再加1个试试   V=75/4 = 18....3 =19

                         V=53/2 = 26   会得到怎样的v呢                                     V=53/3 = 17.....2=18

                         V=59/2 = 29                                                                   V=59/3 = 19......2=20

                                                                                                     因为v肯定是整数,所以有                                                                                                     余数肯定不行,所以我们给她                                                                                                      向上取整一下

根据答案的输出,从上述式子可以看出,再第一组式子中取最小值能满足所有情况,在第二组极限情况下,我们可以发现取这组的最大值,可以满足答案情况,所以就可以推出取第一组的最小值,第二组的最大值。


也可也设转化率为V,A/V = B,  根据式子可以看出想要满足V可以取到B但是不能取到B+1

所以推出 A>=B*V  A < V*(B+1)

(B+1)/A < V <= A/B

最大值:A/B

最小值:(B+1)/ A  + 1 

二分思路:


推公式代码:

#include<iostream>
#include<cmath>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int maxn = 1e9,minn = 1;
    while(n--)
    {
        int a,b;
        cin >> a >> b;
        int l = a/(b+1) + 1,r = a / b;
        maxn = min(maxn,r);
        minn = max(minn,l);
    }
    cout << minn << " " << maxn;
    return 0;
}

二分代码:

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1e4+10;
int a[N],b[N];
int n;
//找到一个B>=A/V
bool check1(int mid)
{
    for(int i=0;i<n;i++)
    {
        if(b[i] < a[i] / mid) return false;
    }
    return true;
}
//根据B >= A/V找到最后一个 B>=A/V的
bool check2(int mid)
{
    for(int i=0;i<n;i++)
    {
        if(b[i] > a[i] / mid) return false;
    }
    return true;
}


int main()
{
    cin >> n;
    int vmax = 0,vmin = 0;
    for(int i=0;i<n;i++) scanf("%d %d", &a[i], &b[i]);
    int l = 1,r = 1e9;
    while(l < r)
    {
        int mid = l + r >> 1;
        if(check1(mid)) r = mid;
        else l = mid + 1;
    }
    vmin = l;
    l = 1,r = 1e9;
    while(l < r)
    {
        int mid = l + r + 1 >> 1;
        if(check2(mid)) l = mid;
        else r = mid - 1;
    }
    vmax = l;
    cout << vmin << " " << vmax << endl;
    return 0;
}

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

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

相关文章

Spring MVC文件下载配置

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 文件下载 在Spring MVC中通常利用commons-io实现文件下载&#xff0c;示例代码如下&#xff1a; Controller RequestMapping("......") public class DownloadC…

AI大模型-Grok搭建

Grok搭建 硬件要求项目下载Checkpoint下载运行代码 马斯克又搞事情了&#xff0c;正式开源AI大模型Grok-1&#xff0c;免费还可商用&#xff0c;国内AI技术即将迎来重大突破。笔者简单整合了一下&#xff0c;如何搭建Grok-1的思路&#xff0c;供后期自己搭建以及读者学习使用。…

房屋租赁系统|基于JSP技术+ Mysql+Java+ B/S结构的房屋租赁系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

理解数据库习题

1.选择 &#xff08;1&#xff09;现实世界中客观存在并能相互区别的事物称为&#xff08; &#xff09;。 A.实体 B.实体集 C字段 D 记录 &#xff08;2&#xff09;下列实体类型的联系中&#xff0c;属于一对一联系的是&#xff08; &#xff09;A.教研室对教师的所属联系 …

centos 环境部署

一、安装redis 1. 升级 GCC 最直接的解决方式是升级你的 GCC 编译器到支持 C11 标准的版本。CentOS 7 默认的 GCC 版本较旧&#xff0c;可能不支持 _Atomic。你可以通过以下步骤升级 GCC&#xff1a; 启用 CentOS 的 Software Collections (SCL) 仓库&#xff0c;该仓库提供了…

力扣---完全平方数

思路&#xff1a; 还是比较好想的&#xff0c;g[i]定义为和为 i 的完全平方数的最少数量。那么递推关系式是g[i]min(g[i-1],g[i-4],g[i-9],...)1&#xff0c;数组初始化是g[0]0,g[1]1。注意这里要对g[0]初始化&#xff0c;&#xff08;举个例子&#xff09;因为在遍历到g[4]时&…

docker安装Milvus

docker安装Milvus 拉去CPU版本的milvus镜像 $ sudo docker pull milvusdb/milvus:0.10.0-cpu-d061620-5f3c00 docker pull milvusdb/milvus:0.10.0-cpu-d061620-5f3c00 mkdir -p milvus/conf cd milvus/conf ls wget https://raw.githubusercontent.com/milvus-io/milvus/v0.1…

未来教育趋势:AI个性化培训如何推动企业与员工共赢

AI定制学习&#xff1a;重新定义个性化员工培训的未来 随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;我们正目睹并亲历了AI在培训领域所引发的根本性变革。AI技术的整合不仅革新了知识传递的模式&#xff0c;而且重新塑造了个性化学习的内涵。依托于尖端算…

平替电容笔哪个品牌好?推荐五款 2024 高人气电容笔,入手不亏!

作为一名有着多年测评数码经验的评测师&#xff0c;用过的原装笔和平替电容笔加起来也有不下十款了&#xff0c;看过也有很多朋友因为选错电容笔&#xff0c;导致书写效率低&#xff0c;体验感差的例子也数不胜数。这并非夸大其词&#xff0c;因为不专业产品的最大弊端就是毫无…

segformer多分类语义分割

前言 本期将分享「Segformer」&#xff0c;论文地址https://arxiv.org/abs/2105.15203。 Segformer简介 全局上下文信息: 由于Transformer的自注意力机制&#xff0c;Segformer可以在整个图像范围内捕获上下文信息&#xff0c;而不受局部感受野的限制&#xff0c;这有助于提高分…

开放签开源电子签章白皮书-简版

开放签开源电子签章白皮书-简版 一、摘要&#xff1a; 开放签电子签章团队源自于电子合同SaaS公司&#xff0c;立志于通过开源、开放的模式&#xff0c;结合团队十多年的行业经验&#xff0c;将电子签章产品更简单、更低门槛的推广到各行各业中。让电子签章应用更简单&#x…

动态路由协议-OSPF与LSA简介

一、概述 前面路由基础学习了路由的类型可以按照动静态路由分类&#xff0c;静态路由就是直连和手动配置的路由&#xff0c;而动态路由协议是各路由器相互动态学习的一种路由协议&#xff0c;现在常用的有OSPF和ISIS路由协议&#xff0c;前面在基础篇我们也已经对OSPF有一个简单…

记录我的第一次面试

面试感受 这是我的第一次面试&#xff0c;我感觉我这次面试的很差&#xff0c;很糟糕&#xff0c;十分的糟糕&#xff0c;万分的糟糕。第一次面试&#xff0c;面试了半个小时。我去真的好紧张&#xff0c;脑子里一篇空白。脑子空白还不是最惨的&#xff0c;最惨的是那个八股文…

MySQL的概述与安装

一、数据库的基本概念&#xff1a; 1.1 数据&#xff1a; 1&#xff09; 描述事物的符号记录称为数据&#xff08;Data&#xff09;。数字、文字、图形、图像、声音、档案记录等 都是数据。 2&#xff09;数据是以“记录”的形式按照统一的格式进行存储的&#xff0c;而不是…

基于SSM的宿舍管理系统的设计与实现(JSP,MySQL)

摘 要 随着社会发展、信息技术的普及&#xff0c;人们日常管理工作也发生了巨大的变化。信息化技术之渗透各行业的方方面面。学生宿舍管理作为校园管理工作的重要一环&#xff0c;不仅关系到学生自身的确切利益&#xff0c;同时也是对校园管理工作重大考验。近来年由于在校学生…

ECMAscript6学习

ECMAscript6介绍 ECMA是一个浏览器脚本标准制定的公司&#xff0c;Netscape 创造了 JavaScript 由于商标原因&#xff0c; 后面ECMA公司取名ECMAscript 1 发布&#xff0c;JavaScript 也就是 ECMAscript.到现在最新的版本是6&#xff0c;简称es6. 新增let 与const let 与const …

精酿啤酒:啤酒花的添加时机与风味影响

啤酒花是啤酒酿造过程中不可或缺的成分&#xff0c;它为啤酒带来与众不同的苦味和香味&#xff0c;并增加了啤酒的层次感和复杂性。接下来将详细介绍Fendi Club啤酒在啤酒花的选择、添加时机和风味影响方面的实践和特点。 首先&#xff0c;Fendi Club啤酒选用上好啤酒花&#x…

Python爬虫获取接口数据

Python爬虫获取接口数据 正常人的操作​​​​​​​​​​爬虫的思路标题获取请求信息标题请求转换为代码完整代码请求返回信息执行程序获取静态网页数据的教程,适用于我们要爬取的数据在网页源代码中出现,但是还是有很多的数据是源代码中没有的,需要通过接口访问服务器来获…

docker仓库登录及配置insecure-registries的方法

docker仓库登录及配置insecure-registries的方法 这篇文章主要介绍了docker仓库登录配置insecure-registries的方法,docker客户端如果配置中添加了insecure-registary配置&#xff0c;就不需要在docker 客户端配置上对应证书&#xff0c;如果不配置要在/etc/docker/certs.d/目…

如何选择适合自己的电源?主机的小伙伴们

如何选择适合自己的电源&#xff1f; 首先我们要学会简单的了解电源&#xff0c;掌握一些关于电源的基础知识。 学会从整体上看待它&#xff0c;然后分析电源的各个元件&#xff0c;以了解一些基本且重要的元件。 比如从电源的分类、电源的铭牌参数信息、电源的结构、材质、品…