我一开始写得贼复杂,但我觉得我的想法是对的,只要时间不限就能全 ac
具体思想是:
i 记录秒数,j 记录下标,k 记录占用水龙头数
内层 while 循环寻找在接水的同学中接水量最小的。在列表内若 0 跳过,若非 0 则加入排序列表寻找最小值
外层 while 循环记录总时长并在接水同学接水量上减去最小值
代码如下:
n = input()
n = n.split(' ')
n, m = int(n[0]), int(n[1])
a = input()
a = a.split(' ')
w = []
for i in a:
w.append(int(i))
i = 0
while sum(w) != 0:
j = 0
k = 0
min_w = 0
compare_list = []
ind_list = []
while j < len(w) and k < m:
if w[j] > 0:
compare_list.append(w[j])
ind_list.append(j)
k += 1
j += 1
min_w = min(compare_list)
for j in ind_list:
w[j] -= min_w
i += min_w
print(i)
在部分 ac 的情况下我实在想不出来,遂求别人的代码
真的,看完我真的震惊了
代码如下:
n, m = map(int, input().split(' '))
li = list(map(int, input().split(' ')))
if n <= m:
print(max(li))
else:
lis = li[:m]
for i in li[m:]:
lis.sort()
lis[0] += i
print(max(lis))
若人数少于龙头数则输出最多接水量
否则令将前 m 项之后的 n - m 项依次加到前 m 项中最小的元素上
最终前 m 项中最大的元素就是总时长
妙啊,妙啊