我一开始写得贼复杂,但我觉得我的想法是对的,只要时间不限就能全 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 项中最大的元素就是总时长

妙啊,妙啊