AcWing 4956. 冶炼金属

对于这个题,V越大,除出来的数就越小,V越小,除出来的数就越大,当我们找一个最大和最小值的时候,就可以通过这个性质进行二分来求解。

可以通过求满足 [ A V ] [\frac{A}{V}] [VA] 小于等于 B B B的最小的 V V V来求最小值,通过满足 [ A V ] [\frac{A}{V}] [VA] 小于等于 B − 1 B-1 B1 V V V最小的值来求最大值(这里是根据下取整函数的性质来决定的,取整函数的函数图像是一段段的横线,可以观察得B的V的最大值就是B-1的V的最小值)。

代码1:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;int get(int a, int b) {//二分函数//b最小取1,但是下面调用函数时有b-1,所以b有可能取到0,那么r就要取到比1e9大//则定义r为1e9+1int 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() {int n; cin >> n;//最小一定是1,最大只能取1e9,大于1e9时B会得到0,不满足题目条件int minV = 1, maxV = 1e9;while (n--) {int a, b; cin >> a >> b;minV = max(minV, get(a,b));maxV = min(maxV, get(a, b - 1) - 1);}cout << minV << " " << maxV;return 0;
}

另一种二分法:
当我们要求V的最小值的时候,先浮现出一个数轴

|----------------------|----------------------|
L					  mid					  R

因为这里是找数,所以不是之前的那些需要满足条件,这里只需要看大小关系。
如果 [ A m i d ] [\frac{A}{mid}] [midA]大于B,就说明mid取小了,所以就要往右边找,也就是从mid +1 ~ R找,如果小于B,那就要从L ~ mid找。

对于求最大值也是同理。

另一种代码:非常模板风味的二分代码:

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e4 + 10;int n;
int a[N], b[N];bool check1(int mid) {  //check1求最小值用for (int i = 0; i < n; i++) {if (a[i] / mid > b[i])return false;     }return true;
}bool check2(int mid) {  //check2求最大值用for (int i = 0; i < n; i++) {if (a[i] / mid < b[i])return false;}return true;
}int main() {cin >> n;for (int i = 0; i < n; i++) cin >> 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;}cout << r << " ";//求最大值l = 1, r = 1e9;while (l < r) {int mid = l + r + 1 >> 1;if (check2(mid)) l = mid;else r = mid - 1;}cout << r << endl;return 0;
}

由于是复习二分,故不记录数学做法

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

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

相关文章

手把手教使用静默 搭建Oracle 19c 一主一备ADG集群

一、环境搭建 主机IPora19192.168.134.239ora19std192.168.134.240 1.配置yum源 1.配置网络yum源 1.删除redhat7.0系统自带的yum软件包&#xff1b; rpm -qa|grep yum >oldyum.pkg 备份原信息rpm -qa|grep yum|xargs rpm -e --nodeps 不检查依赖&#xff0c;直接删除…

EE5437-IOT(Lecture 07-Control Interface System)

Review&#xff1a; introduce the micro input device system&#xff08;MIDS&#xff09; • The calibration and testing has been covered • The introduction to filters with the example called Butterworth filter and the maths have been also demonstrated. …

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:CalendarPicker)

日历选择器组件&#xff0c;提供下拉日历弹窗&#xff0c;可以让用户选择日期。 说明&#xff1a; 该组件从API Version 10开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 CalendarPicker(options?: CalendarOptions) …

跨境账号养号怎么做?Facebook、亚马逊运营必看

之前我们讨论过很多关于代理器的问题。它们的工作原理是什么?在不同的软件中要使用那些代理服务器?这些代理服务器之间的区别是什么?什么是反检测浏览器等等。 除了这些问题&#xff0c;相信很多人也会关心在使用不同平台的时代理器的选择问题。比如&#xff0c;为什么最好…

Mybatis操作sql报错ibatis.binding.BindingException: Parameter ‘empId‘ not found.

你们好&#xff0c;我是金金金。 场景 在使用Mybatis操作sql语句过程当中&#xff0c;更新操作&#xff0c;报错信息如下&#xff1a;Caused by: org.apache.ibatis.binding.BindingException: Parameter ‘empId’ not found. Available parameters are [arg1, arg0, param1, …

m序列生成器

function [m] mserial_generator(tap_set) % m序列产生器 % 输出为m序列&#xff0c;未进行极性变换。 L 2^(length(tap_set)-1)-1; x [zeros(1,(length(tap_set)-2)) 1]; for i 1:1:Lm(i)x(end);for j 1:1:length(tap_set)-1sum_vector(j)tap_set(j1)*x(j);endsum_x mod…

聊聊python中面向对象编程思想

面向对象编程思想 1、什么是面向过程 传统的面向过程的编程思想总结起来就八个字——自顶向下&#xff0c;逐步细化&#xff01; → 将要实现的功能描述为一个从开始到结束按部就班的连续的“步骤” → 依次逐步完成这些步骤&#xff0c;如果某一个步骤的难度较大&#xff…

2024暑期实习八股笔记

文章目录 自我介绍MySQL索引索引种类、B树聚簇索引、非聚簇索引联合索引、最左前缀匹配原则索引下推索引失效索引优化 日志、缓冲池redo log&#xff08;重做日志&#xff09;刷盘时机日志文件组 bin log&#xff08;归档日志&#xff09;记录格式写入机制 两阶段提交undo log&…

20240309web前端_第一周作业_古诗词

作业三&#xff1a;古诗词 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&q…

FLatten Transformer_ Vision Transformer using Focused Linear Attention

paper: https://arxiv.org/abs/2308.00442 code: https://github.com/LeapLabTHU/FLatten-Transformer 摘要 当将transformer模型应用于视觉任务时&#xff0c;自注意的二次计算复杂度( n 2 n^2 n2)一直是一个持续存在的挑战。另一方面&#xff0c;线性注意通过精心设计的映射…

事务的特性,API、隔离级别、传播行为

一、事务 1、事务的介绍 事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么完全地执行&#xff0c;要么完全地都不执行&#xff0c; 它是一个不可分割的工作执行单元。 2、事务的使用场景 例如在日常生活中&#xff0c;有时我们需要进行银行转账&#xff0c;这个银行转…

就业班 2401--3.11 Linux Day15--ftp数据传输测试server和client+谷歌验证码登录远程连接

文件服务器 路漫漫其修远兮&#xff0c;吾将上下而求索.构建NFS远程共享存储 一、NFS介绍 文件系统级别共享&#xff08;是NAS存储&#xff09; --------- 已经做好了格式化&#xff0c;可以直接用。 速度慢比如&#xff1a;nfs&#xff0c;sambaNFS NFS&#xff1a;Networ…

用A*算法求解八数码问题

用A*算法求解八数码问题 实现两种启发函数实现A*算法测试 实现两种启发函数 采取两种策略实现启发函数&#xff1a; 策略1&#xff1a;不在目标位置的数字个数策略2&#xff1a;曼哈顿距离&#xff08;将数字直接移动到对应位置的步数总数&#xff09; # 策略1: 不在目标位置…

蓝桥杯每日一题 (递推、递归、)

3777. 砖块&#xff08;每日一题&#xff09; 后面if条件判断很巧妙&#xff0c;只要有一种成立就不管另一种了。 #include<bits/stdc.h> using namespace std; //3777. 砖块 //跟贪心差不多 string s; int t,n;void update(char &c) {if(cW)cB;else cW; }bool che…

shell文本处理工具-shell三剑客1

shell脚本常用基础命令2 shell脚本常用基础命令 shell脚本常用基础命令2一、grep用法二、sed用法2.1p参数 &#xff08;显示&#xff09;n参数&#xff08;只显示处理过的行&#xff09; 文本处理三剑客&#xff1a;grep sed awk 一、grep用法 grep -E egrep (扩展搜索正文表…

NUMA简介

NUMA 1 什么是NUMA 早期的计算机&#xff0c;内存控制器还没有整合进 CPU&#xff0c;所有的内存访问都需要经过北桥芯片来完成。如下图所示&#xff0c;CPU 通过前端总线&#xff08;FSB&#xff0c;Front Side Bus&#xff09;连接到北桥芯片&#xff0c;然后北桥芯片连接到…

如何查看一个进程有几个子进程

要查看一个进程有多少个子进程&#xff0c;一种方法是通过在命令行上使用 ps 命令结合 pgrep 命令。 pgrep -P <parent_pid> | wc -l其中&#xff1a; <parent_pid> 是你要查看的父进程的进程号&#xff08;PID&#xff09;。 这个命令会列出指定父进程的所有子…

Java集合详解(单列集合 | 双列集合 | Collections集合工具类)

○ 前言&#xff1a; 在开发实践中&#xff0c;我们需要一些能够动态增长长度的容器来保存我们的数据&#xff0c;java中为了解决数据存储单一的情况&#xff0c;java中就提供了不同结构的集合类&#xff0c;可以让我们根据不同的场景进行数据存储的选择&#xff0c;如Java中提…

xpath基础入门

一、XPath是什么 XPath 定位 HTML 文档中的元素的工具 XPath 是一种表达语言&#xff0c;旨在支持XML文档的查询或转换。 XPath由万维网联盟(W3C) 于 1999 年定义。 XPath支持 XML 的应用程序&#xff08;例如 Web 浏览器&#xff09;和许多编程语言都支持 XPath。 XPath 语言…

Tensorflow2.0笔记 - 均方差MSE和交叉熵CROSS ENTROPHY作为损失函数

本笔记主要记录使用MSE和交叉熵作为loss function时的梯度计算方法。 import tensorflow as tf import numpy as nptf.__version__#softmax函数使用 #参考资料&#xff1a;https://blog.csdn.net/u013230189/article/details/82835717 #简单例子&#xff1a; #假设输出的LOGIT…