【备战秋招】每日一题:2023.04.08--华为OD机试(第二题)-新学校选址

为了更好的阅读体检,可以查看我的算法学习网
在线评测链接:P1175

题目内容

为了解决新学期学生暴涨的问题,塔子村要建所新学校。考虑到学生上学安全问题,需要所有学生家到学校距离最短。假设学校和所有的学生家,走在一条直线上。 请问,学校要建在什么位置能使得学校到各个学生家的距离之和最短?

输入描述

输入的第一行是一个整数 N N N ( 1 ≤ N ≤ 1000 1\leq N \leq 1000 1N1000),表示有 N N N户家庭。

输入的第二行是一个属组 n i   ( 0 ≤ n i ≤ 10000 ) n_i\ (0\leq n_i \leq 10000) ni (0ni10000),表示每户家庭的位置.

输出描述

输出一行,一个整数,表示确定的学校位置。如有多个位置相同,则输出值最小的位置。

样例

输入1

5
0 20 40 10 30

输出1

20

输入2

1
20

输出2

20

输入3

2
0 20

输出3

0

题目思路

思路:首先这个问题是曼哈顿距离和最小问题 , 最优位置一定可以是在某个学生家上。所以我们去枚举在哪个学生家上,然后计算距离。找到最小距离即可。最小距离相同我们就选位置小的哪个

具体细节见代码:

n = int(input())
a = [0] + list(map(int,input().split()))
ans = (int)(1e9)
pos = (int)(1e9)
# 枚举最优位置在哪个学生家上
for i in range(1 , n + 1):
    # 计算所有其他学生到这个学生的距离的和
    cost = 0
    for j in range(1 , n + 1):
        cost += abs(a[i] - a[j])
    if ans > cost: #更新答案
        pos = a[i] 
        ans = cost 
    elif ans == cost: # 相同也需要试着更新
        pos = min(pos , a[i])
print(pos)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

塔子哥学算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值