为了更好的阅读体检,可以查看我的算法学习网
在线评测链接:P1175
题目内容
为了解决新学期学生暴涨的问题,塔子村要建所新学校。考虑到学生上学安全问题,需要所有学生家到学校距离最短。假设学校和所有的学生家,走在一条直线上。 请问,学校要建在什么位置能使得学校到各个学生家的距离之和最短?
输入描述
输入的第一行是一个整数 N N N ( 1 ≤ N ≤ 1000 1\leq N \leq 1000 1≤N≤1000),表示有 N N N户家庭。
输入的第二行是一个属组 n i ( 0 ≤ n i ≤ 10000 ) n_i\ (0\leq n_i \leq 10000) ni (0≤ni≤10000),表示每户家庭的位置.
输出描述
输出一行,一个整数,表示确定的学校位置。如有多个位置相同,则输出值最小的位置。
样例
输入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)