额 我把时间全部化成秒。等待时间=早到时间+等前一个人完事时间
我是将所有早到时间先加起来,然后这些人全部归于8点开始。
用time按开始时间排列出所有有效的排队人。用pcs按所需时间排列出所有已经在窗口的人。
等前一个人完事时间=pcs中前一个人的结束时间-time中这个人的开始时间
n, k = list(map(int, input().split()))
time = []
sec = 0
for i in range(n):
temp = input().split()
x = temp[0]
y = 3600 * int(x[0:2]) + 60 * int(x[3:5]) + int(x[6:8])
if int(x[0:2]) < 8: sec += 28800 - y
if int(x[0:2]) < 17: time += [[y, int(temp[1])]]#time[[开始时间,所需时间]]
n = len(time)
time = sorted(time, key=lambda x:x[0])
for i in range(n):
if time[i][0] < 28800: time[i][0] = 28800
pcs = []
for i in time[:k]: pcs.append([i[0] + i[1] * 60, i[1] * 60])#pcs[[结束时间,所需时间]]
for i in range(k, n):
pcs = sorted(pcs, key=lambda x:x[1])
if time[i][0] <= pcs[0][0]:
sec += pcs[0][0] - time[i][0]
for j in range(1, k): pcs[j][1] -= pcs[0][1]#别忘了更新窗口人的所需时间
pcs[0][1] = time[i][1] * 60
pcs[0][0] += pcs[0][1]
else:
pcs = pcs[1:]
pcs.append([time[i][0] + time[i][1] * 60, time[i][1] * 60])
print('%.1f' % (sec/n/60))
版权声明:本文为weixin_46499912原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。