题目描述: 某公司招聘员工,现有k个学校的学生去应聘,现要求每个学校的录取人数不能相同,问最后公司最多录取多少人?
输入描述:第一行一个整数k,表示学校的数量。
第二行k个整数ai,表示这个学校有ai个人前来应聘。
满足 1<=k<=100000,1<=ai<=100000
输出描述:最多录取人数
样例输入:
3
3 3 2
样例输出:
6
解决思路: 创建包含所有学校应聘人数的列表,并进行逆序排列,从大到小依次选择符合条件(各学校录取人数不同)的录取人数,最后求和即可。具体代码如下:
k = int(input())
nums = list(map(int, input().split()))
# 将各学校应聘人数倒序排列
nums_sort = sorted(nums, reverse=True)
# 设定nums用于将各学校录取人数累加求和
nums = 0
# 设定中间值Lat(倒序情况下上所学校的录取人数),保证当前学校的录取人数比上所学校少1(即学校录取人数不能相等)
lat = 0
for i in range(k):
if i == 0:
nums += nums_sort[i]
lat = nums_sort[i]
else:
if nums_sort[i] < lat:
nums += nums_sort[i]
lat = nums_sort[i]
else:
num = max(lat - 1, 0) # 录取人数不能为负数
nums += num
lat = num
print(nums)