绝对值不等式——AcWing 104. 货仓选址

绝对值不等式

定义

与数学中的绝对值不等式定义一致,即含有绝对值符号的不等式。

运用情况

  • 在一些需要根据数值与特定值的距离关系来进行判断和处理的算法中。
  • 用于对数据范围进行约束和界定。

注意事项

  • 确保对绝对值的处理正确,尤其是在复杂的逻辑中。
  • 注意数据类型的精度和范围,避免溢出等问题。

解题思路

  • 可以直接按照数学中绝对值不等式的解题方法进行分析和处理。
  • 结合 C++的语法特点和数据结构来实现具体的算法逻辑。
    例如,在一个排序算法中,可能需要根据元素与某个基准值的绝对值距离来进行特定操作。可以先计算出绝对值,然后根据不等式关系进行判断和相应的处理。在代码实现过程中,要注意代码的简洁性和效率。同时,对于可能出现的边界情况和特殊值要进行充分的测试和验证,以确保算法的正确性和稳定性。

AcWing 104. 货仓选址 

题目描述

104. 货仓选址 - AcWing题库

运行代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
    int n;
    cin >> n;
    vector<int> lo(n);
    for (int i = 0; i < n; i++) {
        cin >> lo[i];
    }
    sort(lo.begin(), lo.end());
    int mid = n / 2;
    int min = 0;
    for (int i = 0; i < n; i++) {
        min += abs(lo[i] - lo[mid]);
    }
    cout << min<< endl;
    return 0;
}

代码思路

  • 首先,定义了变量 n 用于接收商店的数量。
  • 然后,创建一个 vector<int> 类型的 lo 来存储商店的坐标。通过循环读入每个商店的坐标。
  • 接着,对商店坐标进行排序,这是后续计算的重要准备步骤。
  • 计算中间位置索引 mid ,这里假设将货仓建在中间位置可能是距离之和较小的一个选择。
  • 然后通过一个循环,计算每个商店到中间位置的距离的绝对值之和,并累加到 min 中。
  • 最后输出这个最小距离之和。

改进思路

  1. 使用更高效的数据结构:在代码中,可以使用合适的数据结构来存储商店的坐标,以便更快地进行排序和计算。例如,可以使用二叉搜索树或平衡二叉树来代替数组,这样可以提高查找和插入的效率。
  2. 优化排序算法:对商店坐标进行排序是算法的一个关键步骤。可以考虑使用更高效的排序算法,如快速排序或归并排序,以减少排序的时间复杂度。
  3. 利用中位数的性质:根据中位数的定义,货仓建在中位数的位置可以使距离之和最小。可以进一步利用中位数的性质,避免不必要的计算。例如,在排序后,可以直接找到中位数,而不需要扫描整个数组来计算距离之和。
  4. 考虑并行计算:如果数据量较大,可以考虑使用并行计算技术,将计算任务分配到多个线程或进程中,以加快计算速度。
  5. 使用更高效的编程语言或库:选择一种高效的编程语言,并使用其提供的优化库和函数,可能会对算法的性能产生积极影响。
  6. 进行性能测试和分析:在优化过程中,进行性能测试和分析是很重要的。可以使用性能分析工具来测量算法的运行时间和内存使用情况,找出性能瓶颈,并针对性地进行优化。

改进代码

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int main() {
    int n;
    cin >> n;
   vector<int> lo(n);
    for (int i = 0; i < n; i++) {
       cin >> lo[i];
    }
    sort(lo.begin(), lo.end());
    int mid = n / 2;
    if (n % 2 == 0) {  // 若数量为偶数,考虑中间两个位置
        int dist1 = 0, dist2 = 0;
        for (int i = 0; i < n; i++) {
            dist1 += abs(lo[i] - lo[mid - 1]);
            dist2 += abs(lo[i] - lo[mid]);
        }
        cout << min(dist1, dist2) << endl;
    } else {
        int min = 0;
        for (int i = 0; i < n; i++) {
            min += abs(lo[i] - lo[mid]);
        }
        cout << min << endl;
    }
    return 0;
}

其它代码

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 100010;
int a[N];
int main()
{
    int n; cin >> n;
    for(int i = 1; i <= n; i++) cin >> a[i];
    sort(a + 1, a + n + 1);
    int ans = 0, d = a[n / 2 + 1];
    for(int i = 1; i <= n; i++) ans += abs(a[i] - d);
    cout << ans << endl;
    return 0;
}

代码思路

  • 首先定义了一个较大的常量 N 表示可能的最大数据规模。
  • 定义了数组 a 来存储商店的坐标。
  • 在 main 函数中,先输入商店的数量 n ,然后通过循环读入每个商店的坐标并存入数组 a 。
  • 接着对数组进行排序,这是为了找到一个相对中间的位置。
  • 计算出中间位置(或偏中间位置)对应的坐标值 d 。
  • 然后通过循环计算每个商店坐标与 d 的距离的绝对值,并累加到结果 ans 中。最后输出这个总的距离和。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于chatgpt-on-wechat搭建个人知识库微信群聊机器人

前言 啊&#xff0c;最近在别人微信群里看到一个聊天机器人&#xff0c;感觉挺好玩的。之前GPT刚出来的时候就知道有人把聊天机器人接入到微信或者QQ中来增加互动&#xff0c;但是当时没想那个想法。 很久没关注这块了&#xff0c;发现现在可以使用大模型知识库的方式来打造自…

【面试干货】Hashtable 与 HashMap 的区别

【面试干货】Hashtable 与 HashMap 的区别 1、线程安全性2、对null值的处理3、遍历方式4、遍历示例5、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;Hashtable和HashMap都是基于哈希表实现的Map接口。然而&#…

[Django学习]前端+后端两种方式处理图片流数据

方式1&#xff1a;数据库存放图片地址,图片存放在Django项目文件中 1.首先&#xff0c;我们现在models.py文件中定义模型来存放该图片数据,前端传来的数据都会存放在Django项目文件里的images文件夹下 from django.db import modelsclass Image(models.Model):title models.C…

Windows10任务栏卡顿解决方案

一、重新启动任务资源管理器 右键底部任务栏选择“任务管理器”&#xff1b;按快捷键“CtrlShiftEsc”&#xff1b;搜索框搜索“任务管理器”并单击“打开”&#xff1b;“WinX”打开开始菜单附属菜单&#xff0c;在列表中选择“任务管理器” &#xff1b;按下“ctrlaltdelete”…

24年安克创新社招入职自适应能力cata测评真题分享北森测评高频题库

第一部分&#xff1a;安克创新自适应能力cata测评 感谢您关注安克创新社会招聘&#xff0c;期待与您一起弘扬中国智造之美。 为对您做出全面的评估&#xff0c;现诚邀您参加我们的在线测评。 测评名称&#xff1a;社招-安克创新自适应能力cata测评 第二部分&#xff1a;安克…

容器之笔记本构件演示

代码&#xff1a; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>void rotate_book(GtkButton *button, GtkNotebook *notebook) {gtk_notebook_set_tab_pos(notebook, (notebook…

Linux驱动开发(三)--新字符设备驱动开发 LED驱动开发升级

1、新字符设备驱动原理 使用 register_chrdev 函数注册字符设备的时候只需要给定一个主设备号即可&#xff0c;但是这样会 带来两个问题 需要我们事先确定好哪些主设备号没有使用 会将一个主设备号下的所有次设备号都使用掉&#xff0c;比如现在设置 LED 这个主设备号为200&…

这周,接连两位程序员猝死...

这周接连发生了两起不幸的事。俩位程序员去世的消息&#xff0c;深感悲伤和惋惜。 6月17号下午&#xff0c;一位负责研发的女员工在虾皮研发中心办公室猝死&#xff0c;年仅 30 岁。 官方通告&#xff1a; 同一天&#xff0c;另一位科大讯飞的高级测试工程师在家突发不适离世…

UDS服务——TransferData (0x36)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍TransferData (0x36)—— 数据传输,用于下载/上传数据时用的,数据的传输方向由不同的服务控制:0x34服务表示下载,0x35服务表示上传。通过阅读本文,希望能对你有所帮助。 文章目录 诊断协议那些事儿传输数据服务…

Xshell7免费版下载安装使用

​一、下载安装​ 1.打开官网下载 https://www.xshell.com/zh/free-for-home-school/ 2.选择合适的下载路径&#xff0c;点击下载按钮&#xff0c;然后按照提示完成安装。 二、Xshell7的使用&#xff0c;Xhell连接Linux 1.连接之前&#xff0c;确保在Linux中开启SSH。参考&a…

VBA学习(15):工作表加密保护后却把密码忘记了?

今天把过去的一篇推文重新整理一下&#xff0c;提供两种解除工作表加密的方法。 一种是傻瓜模式的VBA&#xff0c;复制运行以下代码&#xff0c;即可抹除当前工作簿所有工作表的保护加密。 Sub UnProtct()MsgBox "破解提示&#xff1a;当要求输入密码时请点击取消&#…

Pnpm:包管理的新星,如何颠覆 Npm 和 Yarn

在探索现代 JavaScript 生态系统时&#xff0c;我们常常会遇到新兴技术的快速迭代和改进。其中&#xff0c;包管理工具的发展尤为重要&#xff0c;因为它们直接影响开发效率和项目性能。最近&#xff0c;pnpm 作为一种新的包管理工具引起了广泛关注。它不仅挑战了传统工具如 np…

激励-保健理论和公平理论

激励-保健理论 herzberg的激励-保健理论中&#xff0c;保健因素是context of a job&#xff0c;激励因素是content of a job。 context of a job是受组织控制的因素&#xff0c;比如工作条件&#xff0c;基本工资&#xff0c;公司政策等&#xff0c;个人无法支配。content of…

【深入浅出MySQL】「数据同步架构」分析探索Canal开源技术原理和架构

分析探索Canal开源技术原理和架构 背景说明Canal基本介绍Canal作用方向MySQL同步原理Binlog Dump交互Binlog的协议模型Canal的模拟slave角色Canal的消费订阅 Canal Server模块Canal Instance模块参考资料类似开源项目 背景说明 在早期阶段&#xff0c;阿里巴巴B2B公司由于其在…

WPF文本框中加提示语

效果&#xff1a; WPF中貌似不能像winfrom里一样直接加提示语&#xff0c;需要使用TextBox.Style&#xff0c;将Trigger标签插入进去。 贴源码&#xff1a; <WrapPanel Name"TakeOverExpressNo1"><Label Content"物流单号&#xff1a;"><…

力扣SQL50 每月交易 I 求和 SUM(条件表达式) DATE_FORMAT(日期,指定日期格式)

Problem: 1193. 每月交易 I &#x1f468;‍&#x1f3eb; 参考题解 Code select DATE_FORMAT(trans_date, %Y-%m) AS month,country,count(*) as trans_count,count(if(state approved, 1, NULL)) as approved_count,sum(amount) as trans_total_amount,sum(if(state appr…

MS17-010(Eternal blue永恒之蓝)漏洞利用+修复方法

目录 一、漏洞简介 漏洞原理 影响版本 二、漏洞复现 三、复现过程 1、扫描局域网内的C段主机&#xff08;主机发现&#xff09; 扫描结果&#xff1a; 2.使用MSF的永恒之蓝漏洞模块 3.对主机进行扫描&#xff0c;查看其是否有永恒之蓝漏洞 4.准备攻击 四、漏洞利用 …

华为---OSPF被动接口配置(四)

9.4 OSPF被动接口配置 9.4.1 原理概述 OSPF被动接口也称抑制接口&#xff0c;成为被动接口后&#xff0c;将不会接收和发送OSPF报文。如果要使OSPF路由信息不被某一网络中的路由器获得且使本地路由器不接收网络中其他路由器发布的路由更新信息&#xff0c;即已运行在OSPF协议…

【泛微系统】解决启动非标功能时提示客户ID不一致的问题

解决启动非标时提示CID不一致的问题 泛微OA系统是一个非常丰富的系统,我们在日常工作中会经常遇到很多业务需求,我们会用到很多功能来承载这些需求的实现;OA系统里有标准功能,也有非标准的功能;对于非标准的功能需要打非标补丁包; 有些同学在个人学习系统的过程中会安装本…

[图解]企业应用架构模式2024新译本讲解16-行数据入口2

1 00:00:00,750 --> 00:00:02,470 好&#xff0c;我们来看代码 2 00:00:03,430 --> 00:00:06,070 我们一步一步执行 3 00:00:42,500 --> 00:00:45,000 先初始化数据 4 00:00:52,300 --> 00:00:53,650 创建连接 5 00:00:55,900 --> 00:00:56,970 这里面 6 0…