Python-1017 Queueing at Bank

  • Post author:
  • Post category:python


额 我把时间全部化成秒。等待时间=早到时间+等前一个人完事时间

我是将所有早到时间先加起来,然后这些人全部归于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 版权协议,转载请附上原文出处链接和本声明。