问题 B: 分金块

题目描述

       有一个老板有一袋金块。每个月将有两名雇员会因其优异的表现分别被奖励一个金块。按规矩,排名第一的雇员将得到袋中最重的金块,排名第二的雇员将得到袋中最轻的金块。根据这种方式,除非有新的金块加入袋中,否则第一名雇员所得到的金块总是比第二名雇员所得到的金块重。如果有新的金块周期性的加入袋中,则每个月都必须找出最轻和最重的金块。假设有一台比较重量的仪器,我们希望用最少的比较次数找出最轻和最重的金块。

本题要求用二分算法完成。

输入

       输入数据有多行,第一行为金块个数n(2<=n<=5000000),接下来n行是n个金块的重量。

输出

       输出最重的金块和最轻的金块,用空格隔开。

样例输入
8
10
8
2
4
5
3
9
1
样例输出
10 1

问题分析

  1. 问题分解

    • 将金块数组分为两半,每一半分别寻找最重和最轻的金块。
    • 如果数组只剩下一个金块,那么这个金块既是最重的也是最轻的。
    • 如果数组剩下两个金块,通过简单比较即可确定哪个更重哪个更轻。
  2. 递归处理

    • 递归地应用同样的过程到每一半的金块上,直到只剩下一个或两个金块为止。
    • 这样的递归调用会持续地将问题规模减半,直至达到可以直接解决的简单情况。
  3. 合并结果

    • 在每个递归级别,将两半金块的结果合并起来。
    • 对于每一对递归调用的结果,比较并确定这两部分中的最重金块和最轻金块。
    • 最终,顶层的递归调用将返回整个数组中的最重金块和最轻金块。
#include <bits/stdc++.h>
using namespace std;// fz 函数用于找出数组中的最大值和最小值
// 它接收金块数组 a 以及当前搜索的范围 [l, r]
pair<int,int> fz(vector<int>& a, int l, int r) {if (l == r) {// 如果只剩下一个元素,那么这个元素既是最大值也是最小值return {a[l], a[r]};} else if (l + 1 == r) {// 如果只剩下两个元素,比较这两个元素,分别确定最大值和最小值return {max(a[l], a[r]), min(a[l], a[r])};}// 计算中间位置,将数组分为两部分int mid = r + (l - r) / 2;// 递归地在左半部分找出最大值和最小值pair<int, int> left = fz(a, l, mid);// 递归地在右半部分找出最大值和最小值pair<int, int> right = fz(a, mid + 1, r);// 比较左右两部分找到的最大值和最小值,返回整体的最大值和最小值return {max(left.first, right.first), min(left.second, right.second)};
}int main() {int n; // 存储金块的数量cin >> n;vector<int> a(n); // 使用一个向量来存储金块的重量// 读取金块的重量for (int i = 0; i < n; i++) {cin >> a[i];}// 调用 fz 函数找出最重和最轻的金块pair<int, int> ans = fz(a, 0, n - 1);// 输出最重的金块和最轻的金块cout << ans.first << " " << ans.second << endl;
}

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

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

相关文章

20.扫雷

题目 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int m sc.nextInt();int[][] f new int[n][m];for(int i0;i<n;i) {for(int j0;j<m;j) {f[i][j] sc.nextInt()…

TS学习笔记一:认识TS及环境准备

本次学习笔记是具有一定js基础的情况下从头开始学习ts相关内容。 视频信息 TS学习笔记一&#xff1a;认识TS及环境准备 B站视频 TS学习笔记一&#xff1a;认识TS及环境准备 西瓜视频 https://www.ixigua.com/7320049274006274560 1.1.目的 通过本次学习&#xff0c;学习并…

养乐多公司确认 95 G 用户私密数据被泄露

一名自称为DragonForce的组织声称已经公开泄露了澳大利亚养乐多公司&#xff08;Yakult Australia&#xff09;的95.19 GB数据。Yakult Australia证实了这次网络攻击的真实性&#xff0c;并表示公司在澳大利亚和新西兰的IT系统都受到了影响。 该公司在一份声明中表示&#xff…

21.串的处理

题目 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String str sc.nextLine();char[] c str.toCharArray();int n c.length;StringBuilder st new StringBuilder();int i 0;while(i<n)…

C++学习笔记 ——this指针+对象数组

目录 一、Cthis指针 二、this指针的一个案列 三、对象数组 四、对象数组代码案列详解 一、Cthis指针 C中的this指针是一个特殊的指针&#xff0c;它指向当前对象的地址。在类中的成员函数中&#xff0c;this指针可以用来访问当前对象的成员变量和成员函数。 当我们调用一…

轻松玩转书生·浦语大模型趣味Demo

轻松玩转书生浦语大模型趣味Demo 大模型及InternLM模型介绍InternLM模型全链路开源 InternLM-Chat-7B智能对话Demo模型介绍模型部署webDemo运行 Lagent智能体工具调用DemoLagent介绍 浦语灵笔图文创作理解Demo通用环境配置模型下载 大模型及InternLM模型介绍 人工智能领域中 参…

shell 计算两个数据百分比,bc高级运算,bc计算系统磁盘剩余内存

目录 安装运算工具 bc使用方法高级数学库 (直接把公式 给他即可)计算百分比计算内存已经使用的百分比计算圆周率 安装运算工具 bc yum -y install bc使用方法 echo $((10/3)) | bc高级数学库 (直接把公式 给他即可) echo $((24)) | bc -l计算百分比 这里是 bc 的用法 也是计…

深度学习 Day24——J3-1DenseNet算法实战与解析

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 文章目录 前言1 我的环境2 pytorch实现DenseNet算法2.1 前期准备2.1.1 引入库2.1.2 设…

「Verilog学习笔记」编写乘法器求解算法表达式

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule calculation(input clk,input rst_n,input [3:0] a,input [3:0] b,output [8:0] c);reg [8:0] data1, data2 ; assign c data2 ; always (posed…

猫咪主食罐头巅峰、希喂、K9哪款好?猫咪主食罐头真实对比测评

在当前科学喂养观念广泛传播的背景下&#xff0c;铲屎官们对猫咪主食的营养价值和健康性有了更高的要求。作为猫咪日常成长和活动的主要能量来源&#xff0c;主食的营养价值对猫咪的健康状况有着直接的影响。特别是对于处于成长期的猫咪来说&#xff0c;选择一款优质的主食对其…

关键词优化完整 “操作 “指南

关键词优化的定义 在内容中突出相关关键词的行为&#xff0c;有助于将谷歌流量引向您的网站。关键词优化要求内容创建者做到以下几点&#xff1a; 研究并发现最佳关键词找到自然的方式在内容中突出相关词语 看看&#xff0c;你已经创建了一些很棒的内容。你做了研究&#xf…

K8S部署GitLab

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

SpringBoot 如何 返回页面

背景 RestController ResponseBody Controller Controller中的方法无法返回jsp页面&#xff0c;或者html&#xff0c;配置的视图解析器 InternalResourceViewResolver不起作用&#xff0c;返回的内容就是Return 里的内容。 Mapping ResponseBody 也会出现同样的问题。 解…

雅思词汇——Word List 2(V2)

文章目录 1. regional [ˈriːdʒənl]2. secure [sɪˈkjʊər]3. preserve [prɪˈzɜːrv]4. reject [rɪˈdʒɛkt]5. code [koʊd]6. seek [siːk]7. item [ˈaɪtəm]8. crown [kraʊn]9. effort [ˈɛfərt]10. point [pɔɪnt]11. review [rɪˈvjuː]12. fabrication …

明明白白安装Python解释器(多版本共存切换)、Python IDE:PyCharm(专业版永久)、透彻!

Python解释器安装 ———————— 解释器&#xff08;英语&#xff1a;Interpreter&#xff09;。用户可以到Python的官网上直接下载Python解释器安装程序。 在浏览器地址栏中输入&#xff1a; http://www.python.org 需要最新专业版PyCharm永久使用权限的扫码免费获取&a…

基于FFmpeg的短视频编辑工具Cut

前言 最近在学习FFmpeg和音视频的相关知识&#xff0c;为了加强对FFmpeg的认识和了解&#xff0c;于是撸了一个短视频编辑软件Cut。 效果图先行&#xff1a; 技术点 启动页优化 但启动app的时候会有一个短暂的黑屏或者白屏。为什么呢&#xff1f; 是因为在App启动时&#x…

智能分析网关V4在工业园区周界防范场景中的应用

一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;对…

分布式系统——共识问题

1. 分布式系统 1.1 分布式系统的概念 分布式系统是由多台计算机组成的网络&#xff0c;这些计算机共同协作以实现一个共同的目标。在这种环境中&#xff0c;每台计算机作为一个独立的进程运行。但对最终用户来说&#xff0c;它们似乎是作为一个单一系统在操作。这个概念对于创…

大学生搜题软件,未来可期吗?

作为一家专注于软件开发的公司《智创有术》&#xff0c;我们致力于为客户提供创新、高效和可靠的解决方案。通过多年的经验和专业知识&#xff0c;我们已经在行业内建立了良好的声誉&#xff0c;并赢得了客户的信任和支持。 支持各种源码&#xff0c;网站搭建&#xff0c;APP&a…

数字孪生在增强现实(AR)中的应用

数字孪生在增强现实&#xff08;Augmented Reality&#xff0c;AR&#xff09;中的应用可以提供更丰富、交互性更强的现实世界增强体验。以下是数字孪生在AR中的一些应用&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff…