当前位置: 首页 > news >正文

湘潭做网站价格品牌磐石网络网站提交链接入口

湘潭做网站价格品牌磐石网络,网站提交链接入口,海口个人建站模板,高端网站制作建设题目如下: 拿到题我们来看一下,题目的意思,就是求出N个记录中的最大最小值,言外之意就是,如果超过了这个最大值不行,如果小于这个最小值也不行,所以我们得出,这道题是一个二分答案的题目&#x…

题目如下:

在这里插入图片描述
拿到题我们来看一下,题目的意思,就是求出N个记录中的最大最小值,言外之意就是,如果超过了这个最大值不行,如果小于这个最小值也不行,所以我们得出,这道题是一个二分答案的题目,求出分界点。
首先我们输入 N 个组别,分别输入a , b 。
我们先讨论最小值,我们写一个binary_min函数,用来二分答案的最小值,记最小值为 ans
首先,左边界为 1 通过题目我们知道 我们要求的 V在分母上 所以我们最小为1,最大则为当前a(分子)的值
下来我们开始二分,在二分答案中我们应该写成while(l<r)这样我们就不用记录中间的状态了(下面注释中会说到), mid=l+r>>1取中值,下来进入主要逻辑,当a/mid(V)<=b的时候,我们可以得出我们现在的值在分界点的左边,需要将V的值变大,那么就需要将分母上的值(mid)变小,那么我们就需要向左收缩区间令r=mid(这里说明为什么应该为l<r,我们在之前的二分中,左闭右开时,循环的条件为while(l<=r),而这次需要写成l<r,我们最终要找的是临界点 所以我们最后需要 l==r 而不是l=r+1)
当写成while(l<=r)时,错误写法

// 错误示例:使用 l <= r 但不记录答案
int binary_min(int a, int b) {int l = 1, r = a;while (l <= r) {  // 问题1:循环会在 l=r+1 时结束int mid = (l + r) / 2;if (a / mid <= b) {r = mid - 1;  // 问题2:可能错过正确答案} else {l = mid + 1;}}return l;  // 错误:循环结束时 l 可能已超出有效范围
}

最主要的就是可能会直接跳过最佳的答案,导致答案不正确(采用左闭右闭的写法时,应该确保每次右边的边界都不会被跳过,由于我们的循环条件为l<r)所以我们应该记录一下右边界的值
所以应该向右收缩时记录值

		if (a / mid <= b) {ans = mid;  // 记录当前有效解r = mid - 1;  // 向左收缩(关键:r=mid-1而非r=mid)} else {l = mid + 1;}

正确写法

int binary_min(int a, int b) {int l = 1, r = a;while (l < r) {int mid = (l + r) >> 1;if (a / mid <= b) {r = mid;  // 保留当前 mid 作为候选} else {l = mid + 1;}}return l;  // 循环结束时 l 即为答案
}

了解了这一原理,下来继续写题,我们写完函数之后试着输出一下。
在这里插入图片描述
得到了这样一组数据,为什么会出现这种呢?因为有三个记录,每个记录对应着一个最小值,对于每个 (a, b),满足条件的 V 可能形成一个区间 [min_V, max_V]。当有多组输入时,我们需要找到一个公共的 V 范围,使得所有组的条件都被满足。
代码

	ans=max(ans,binary_min(a,b));ans2=min(ans2,binary_max(a,b));

我们每次都会获得一个V我们要在所有的可能最小值里面选出一个最大的,在所有可能得最大值中选择一个最小的,以此来满足公共区间例如在上面的例子中,18已经是最小的值了,所以我们答案可以大于等于18,所以我们需要取这一堆数的最大值,同理
在这里插入图片描述
获得了每组数据的最大上限,大的不一定全部满足,小的一定全部满足,找到其中的最小值,就是我们最终答案的最大值

AC代码:

#include <iostream>
#include<limits.h>
#include<algorithm>
using namespace std;
//找最大值
int binary_max(int a,int b){int l=1,r=a;while(l<r){int mid=(l+r+1)>>1;if((a/mid)>=b){l=mid;}elser=mid-1;}return l;
}//找最小值
int binary_min(int a,int b){int l=1,r=a;while(l<r){int mid=(l+r)>>1;if((a/mid)<=b){r=mid;}elsel=mid+1;}return l;
}
int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int N;cin>>N;int ans=INT_MIN,ans2=INT_MAX;while(N--){int a,b;cin>>a>>b;ans=max(ans,binary_min(a,b));ans2=min(ans2,binary_max(a,b));}cout<<ans<<" "<<ans2;return 0;
}
http://www.dtcms.com/a/421446.html

相关文章:

  • 外包网站建设报价专业制作网站报价
  • aspnet东莞网站建设多少钱企业网站的建立特点是什么
  • 网站备案专员青岛建设局网站首页
  • 交易所网站建设教程广州网页设计html
  • 旅游网站毕业设计和论文网站开发文档撰写作业
  • 网站制作的基本概念苏州朗冠网站建设公司
  • 做网站怎么切片wordpress文章插广告
  • 做视频网站代码wordpress如何配置
  • 电子商务网站功能模块农村自建房设计图 一层楼
  • 赤城县城乡建设局网站阿里云 域名申请
  • app定制开发网站制作网站制作的评价指标中
  • 关于国际贸易的网站wordpress lay
  • 一个域名可以绑定两个网站吗如何查询网站的备案号
  • 科技因子网站建设方案项目流程八个阶段
  • 网站源码 com大全网站快速建设入门教程
  • html5网站建设中模板如何做二级域名网站
  • php网站建设实训引言怎么做网站的点击率
  • 跟做网站的人谈什么广东圆心科技网站开发网站模板设计
  • 南通住房和城乡建设局网站百度云wordpress建站
  • 网上做网站网站吗自己做图片网站
  • 阳泉推广型网站开发西部数码网站管理助手c盘安装
  • aspcms 网站搬家如何利用网站做demo
  • 个人做哪方面的网站开发 网站 沈阳
  • 网站怎么用办一个购物网站要多少钱
  • 如何做公司培训网站山东专业网站建设哪家便宜
  • 游戏币网站怎么做wordpress建一个网站
  • 网站界面用什么做的邵阳建设银行网站是多少
  • 什么网站可以找人做系统长沙现在可以自由进出吗
  • 大连企业网站wordpress 微博图床
  • 用网站模板给人做网站挣钱吗潍坊响应式网站建设要多久