Python-1017 Queueing at Bank

额 我把时间全部化成秒。等待时间=早到时间+等前一个人完事时间
我是将所有早到时间先加起来,然后这些人全部归于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))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值