news 2026/7/5 15:14:10

题解:洛谷 B4495 [GESP202603 一级] 交朋友

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
题解:洛谷 B4495 [GESP202603 一级] 交朋友

【题目来源】

洛谷:B4495 [GESP202603 一级] 交朋友 - 洛谷

【题目描述】

Alice 班上共有 4 个小朋友,身高分别为H 1 H_1H1,H 2 H_2H2,H 3 H_3H3,H 4 H_4H4,其中 Alice 的身高为H 1 H_1H1。Alice 想要和身高最接近她的人交朋友,如果有多个人符合条件,则 Alice 想和其中较矮的那一人做朋友,你能告诉她这个人的身高是多少吗?

【输入】

输入共 4 行,第i ii行包含一个整数H i H_iHi,表示班上小朋友的身高。

【输出】

输出 1 行,包含一个整数h hh,表示 Alice 想交的朋友的身高。

【输入样例】

150 165 135 133

【输出样例】

135

【核心思想】

  1. 问题分析:给定 4 个身高值H 1 , H 2 , H 3 , H 4 H_1, H_2, H_3, H_4H1,H2,H3,H4H 1 H_1H1为 Alice 的身高),需要在H 2 , H 3 , H 4 H_2, H_3, H_4H2,H3,H4中找到与H 1 H_1H1身高差绝对值最小的人。若存在多人身高差相同,则选择身高较矮者。本质是带平局处理的最小距离搜索问题。

  2. 算法选择

    • 线性扫描比较:初始化最优候选为H 2 H_2H2,依次与H 3 , H 4 H_3, H_4H3,H4比较,根据比较规则更新最优解
  3. 关键步骤

    • 初始化:最优身高minh = H 2 \text{minh} = H_2minh=H2,最小高度差minn = ∣ H 1 − H 2 ∣ \text{minn} = |H_1 - H_2|minn=H1H2
    • 遍历比较(对H 3 , H 4 H_3, H_4H3,H4):
      • 计算当前高度差d = ∣ H i − H 1 ∣ d = |H_i - H_1|d=HiH1
      • d < minn d < \text{minn}d<minn:更新minh = H i \text{minh} = H_iminh=Himinn = d \text{minn} = dminn=d
      • 否则若d = minn d = \text{minn}d=minnH i < minh H_i < \text{minh}Hi<minh:更新minh = H i \text{minh} = H_iminh=Hi(平局时选较矮者)
    • 输出结果minh \text{minh}minh
  4. 时间/空间复杂度

    • 时间复杂度:O ( 1 ) O(1)O(1),固定 3 次比较
    • 空间复杂度:O ( 1 ) O(1)O(1),仅使用常数个变量
  5. 带平局处理的最小距离搜索核心思想

    • 双重比较条件:优先比较"距离"(身高差绝对值),距离更小时无条件更新;距离相等时引入第二关键字"身高本身"进行平局裁决
    • 贪心局部最优:每次比较只关注当前候选与当前最优的相对关系,由于比较规则具有传递性,线性扫描即可得到全局最优
    • 初始化策略:将第一个候选H 2 H_2H2作为初始最优解,避免空值判断,简化代码结构
    • 可扩展性:虽然本题固定为 4 人,但算法可自然扩展到N NN人场景(循环遍历H 2 H_2H2H N H_NHN
    • 适用于带优先级排序的最近邻搜索、多关键字比较等基础决策问题

【算法标签】

#入门 #语法基础

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;intmain(){inth1,h2,h3,h4;// 定义四个整数变量,表示四个高度cin>>h1>>h2>>h3>>h4;// 从标准输入读取四个高度值intminh=h2;// 初始化最小高度差对应的高度为h2intminn=abs(h1-h2);// 初始化最小高度差为h1和h2的差的绝对值// 比较h3和h1的高度差if(abs(h3-h1)<minn||(abs(h3-h1)==minn&&h3<minh)){minh=h3;// 如果h3的高度差更小,或者高度差相同但h3更矮,则更新最小高度minn=abs(h3-h1);// 更新最小高度差}// 比较h4和h1的高度差if(abs(h4-h1)<minn||(abs(h4-h1)==minn&&h4<minh)){minh=h4;// 如果h4的高度差更小,或者高度差相同但h4更矮,则更新最小高度minn=abs(h4-h1);// 更新最小高度差}cout<<minh<<endl;// 输出与h1高度差最小的高度值,如果高度差相同则输出较小的那个高度return0;// 程序正常结束}

【运行结果】

150 165 135 133 135
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 15:07:49

Leetcode刷题python3版第一周(下)

Day5 LeetCode 150、逆波兰表达式求值&#xff08;中等√&#xff09; 根据 逆波兰表示法&#xff0c;求表达式的值。 有效的算符包括 、 - 、 * 、 / 。每个运算对象可以是整数&#xff0c;也可以是另⼀个逆波兰表达式。 注意 两个整数之间的除法只保留整数部分。 可以保证…

作者头像 李华
网站建设 2026/7/5 15:07:39

电脑省电技巧:从日常设置到硬件优化的实战指南

很多笔记本用户都有过这样的尴尬时刻&#xff1a;明明出门前电量是满的&#xff0c;结果在高铁上刚打开文档没多久&#xff0c;系统就弹窗提示电量不足&#xff1b;或者在会议室演示 PPT 时&#xff0c;风扇突然狂转&#xff0c;不仅噪音扰人&#xff0c;电量也如流水般下降。这…

作者头像 李华
网站建设 2026/7/5 15:06:39

3分钟掌握uesave:轻松解锁Unreal引擎游戏存档编辑自由

3分钟掌握uesave&#xff1a;轻松解锁Unreal引擎游戏存档编辑自由 【免费下载链接】uesave Rust library and CLI to read and write Unreal Engine save files 项目地址: https://gitcode.com/gh_mirrors/ue/uesave 你是否曾经面对Unreal引擎游戏的神秘二进制存档束手无…

作者头像 李华
网站建设 2026/7/5 15:01:11

安卓玩机工具推荐------联机读取 YU 修改IMEL MEID ESN 工具操作

在前面分享的几款工具中。大多用于修改qcn或者联机读取与修改串码的工具较多。但这款工具可以联机读取串码 meid esn。并且在没有基带加密的机型上可以读取与修改。注意。只支持高通芯片。而且前提必须是基带分区没有加密否则只能读取不能写入参数。但可以备份qcn。原则上只适…

作者头像 李华