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

显示器插座最短连线算法(蓝桥杯十六届C组编程题第二题)

样例输入:

2

0

1

2

3

样例输出:

4

代码如下:

#include <stdio.h>

long long calcuateMinLength(int xianshiqi[],int chazuo[],int n)
{
int i,j,temp;

for(int i=0;i < n - 1;i++){
for(int j=0;j < n-1-i;j++){
if(xianshiqi[j] > xianshiqi[j+1]){
temp = xianshiqi[j];
xianshiqi[j] = xianshiqi[j + 1];
xianshiqi[j + 1] = temp;
}
}
}

for(int i=0;i < n-1;i++){
for(int j=0;j< n-1-i;j++){
if(chazuo[j] > chazuo[j+1]){
temp = chazuo[j];
chazuo[j] = chazuo[j + 1];
chazuo[j + 1] = temp;
}
}
}

long long totalLength = 0;

for(int i=0;i< n ;i++){
int cha = chazuo[i] - xianshiqi[i];
if(cha < 0){
cha = -cha;
}
totalLength += cha;
}

return totalLength;

}
int main()
{
int n;
int dq[50005];
int cz[50005];
int k;

scanf("%d",&n);

for(k=0;k<n;k++){
scanf("%d",&dq[k]);
}

for(k=0;k<n;k++){
scanf("%d",&cz[k]);
}
printf("%lld",calcuateMinLength(dq,cz,n));

return 0;
}

代码中的变量含义备注
xianshiqi[]显示器数组存放所有显示器的坐标位置
chazuo[]插座数组存放所有插座的坐标位置
n数量显示器和插座各有多少个
totalLength总长度最终答案,所有线的长度之和
cha差值两个坐标之间的距离

🧠 核心函数:calcuateMinLength

第一步:给显示器排队(冒泡排序)

  • 目的:把所有显示器按照坐标从小到大排列。
  • 原理:就像排队一样,相邻的两个人比大小。如果左边的人(xianshiqi[j])比右边的人(xianshiqi[j+1])大(也就是坐标更靠右),就让他们交换位置。
  • 结果:这一通折腾下来,xianshiqi数组里,坐标小的在最前面,坐标大的在最后面。

第二步:给插座排队(冒泡排序)

  • 目的:同理,把所有插座也按照坐标从小到大排列。

第三步:一一对应连线(贪心策略)

  • 核心逻辑
    • 现在显示器排好队了,插座也排好队了。
    • 我们让第 1 个显示器第 1 个插座第 2 个显示器第 2 个插座……以此类推。
    • 这就是所谓的“贪心算法”:排序后一一对应,总距离最短
  • 计算距离
    • chazuo[i] - xianshiqi[i]:算出两个坐标的差。
    • if(cha < 0) cha = -cha;:这一步是在求绝对值。因为线长不能是负数,比如插座在左边(坐标小),显示器在右边(坐标大),减出来是负数,我们要把它变成正数。
  • 累加:把每一根线的长度都加到totalLength里。

注意:这里用了long long来存总长度。因为题目里说坐标最大是 109109 ,如果有 5 万个这样的数加起来,普通的int存不下(会溢出爆炸),必须用更大的long long

🏭 主函数:main

主函数负责“招兵买马”和“发号施令”。

  1. 定义大数组int dq[50005];int cz[50005];。题目说最多50000个设备,这里开稍微大一点点,防止不够用。
  2. 输入数据
    • 先读n
    • 第一个for循环:把显示器的坐标一个个读进dq数组。
    • 第二个for循环:把插座的坐标一个个读进cz数组。
  3. 调用计算printf("%lld", calcuateMinLength(dq, cz, n));
    • 把装好数据的数组扔进刚才写的函数里。
    • 拿到返回的结果,用%lld格式打印出来。

📌 总结

这段代码虽然用的是最基础的冒泡排序(效率略低,但在 �=50000N=50000 时可能会稍微慢一点点,不过逻辑完全正确),但它的优点在于可读性极强。它完美地展示了“排序 + 贪心”的解题思路:

  1. 把乱的坐标理整齐(排序)。
  2. 按顺序一个个配对(贪心)。
  3. 算出距离加起来(累加)
http://www.jsqmd.com/news/607992/

相关文章:

  • wan2.1-vae部署案例:双RTX 4090显卡适配方案与显存优化实操解析
  • AutoDL实例没GPU了?别慌!手把手教你无损迁移数据和镜像到带GPU的新机器
  • 万本双抗焕亮精华水全肤质适配攻略 - 资讯焦点
  • BeRoot高级使用技巧:如何利用LD_PRELOAD和Python库劫持实现权限提升
  • 自定义编码器深度解析:msgpack Golang高级用法终极指南
  • 2026最新商标交易平台怎么选?正规靠谱平台都有这些特征 - 资讯焦点
  • dhcp小实验
  • 深入解析Cesium影像图层:ImageryLayer与ImageryProvider类的核心功能与应用
  • 【从0到1】
  • 开源工具ncmdump:突破NCM格式限制的音频格式转换方案
  • 掌握 cmake --build:跨平台构建的高效实践指南
  • 【Loongson/LS2H】HDMI 显示从 PMON 到 Linux 内核完整打通(配置 + 驱动 + 排查全流程)
  • 用 Microsoft Agent Framework 构建 SubAgent(Multi-Agent)角
  • 黄褐斑过来人实测!BFBY美白修护面膜适配多肤质,淡斑修护双在线 - 资讯焦点
  • 用 Python + OpenCascade 自动生成 3D CAD 模型,并导出 SolidWorks 可打开的 STEP 文件
  • AI Agent Harness模型微调数据管控
  • 2026金平区新房全屋定制选型指南:满足这3个硬指标才算靠谱 - 精选优质企业推荐榜
  • Insights into Imaging 河北医科大学第二医院:基于MRI的瘤内异质性量化用于肝内肿块型胆管癌分级
  • 2026年亲测有效:本地生活GEO品牌推荐复盘
  • 如何快速入门Node.js C++插件开发:node-addon-examples实战教程
  • 鸿蒙物联网开发教程-第十章 HarmonyOS物联网综合项目设计1
  • 2026年排插有哪些品牌?市场热门品牌推荐 - 品牌排行榜
  • 行业竞争激烈时如何做好SEO优化_网站的技术优化对SEO来说很重要吗
  • 2026四平靠谱铝门窗、系统门窗品牌盘点:兼顾性能与本地服务 - 资讯焦点
  • 华为AP有线口除了供电还能干啥?解锁‘瘦AP’变身小型接入交换机的高阶玩法
  • 【限时技术解禁】.NET 9未公开Edge Preview特性:Hardware Intrinsics for NEON加速、实时信号处理模块源码级剖析
  • TPFanCtrl2:ThinkPad双风扇控制的终极解决方案与完整配置指南
  • [特殊字符]教资面试倒计时!这份“通关三件套”资料包,帮你省下80%瞎忙活的时间!
  • 2026铁岭铝门窗、系统门窗品牌排行:适配东北气候的靠谱之选 - 资讯焦点
  • ubuntu使用中的问题