Python-1017 Queueing at Bank

Python-1017 Queueing at Bank,第1张

额 我把时间全部化成秒。等待时间=早到时间+等前一个人完事时间
我是将所有早到时间先加起来,然后这些人全部归于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))

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/873582.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存