Python|外卖店优先级

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

欢迎加入团队圈子!与作者面对面!直接点击!

问题描述

外卖系统中维护着N家外卖店,编号1~N。每家外卖店都有一个优先级,初始时(0时刻)优先级都为0。

每经过1个时间单位,如果外卖唐没有订单,则优先级会减少1,最低减到0;而如果外卖店有订单,则优先级不减反加,每有一单优先级加2。

如果某家外卖店某时刻优先级大于5,则会被系统加入优先缓存中;如果优先级小于等于3,则会被清除出优先缓存。

给定T时刻以内的M条订单信息,请你计算T时刻时有多少外卖店在优先缓存中。

【输入格式】

第一行包含3个整数N、M和T。

以下M行每行包含两个整数t和id,表示ts时刻编号id的外卖唐收到一个订单

【输出格式】

输出一个整数代表答案。

【样例输入】

2 6 6

1 1

5 2

3 1

6 2

2 1

6 2

【样例输出】

1

【样例解释】

6时刻时,1号店优先级降到3,被移除出优先缓存;2号唐优先级升到6加入优先缓存。所以是有1家店(2号)在优先缓存中。

解决方案

这道题是根据输入的数据依次判断时间点是否有订单来进行优先级的加减。那么直接根据输入的数据建立一个初始值为0的列表,再按照输入数据随着时间进行判断。

这里可以创立一个新的列表,利用字典对输入的值进行填充,再遍历新创立的列表,有就+2,没有就-1。

最后便是对加入或者删除优先级缓存的判断。对缓存的判断要以3为标准。这样才可以对已加入缓存的店铺进行加减。最后遍历删除<=3就行。

代码示例:

N, M, T = map(int, input().split())

lis = [0 for i in range(N)]   #创建一个基础优先级为0的列表

lis_a, lis_b = [], []

dic = {}

for i in range(M):

    a, b = map(int, input().split())

    lis_a.append(a)

    lis_b.append(b)

for i in range(1, T+1):     #按时间点进行判断

    lis1 = []               #每次遍历的时间点若有订单就加入

    for j in range(M):

        if lis_a[j] == i:

            lis1.append(lis_b[j])

    for k in lis1:         #在列表中,即有订单,+2

        lis[k-1] += 2

    for p in range(1, N+1):  #不在列表,-1

        if p not in lis1 and lis[p-1] > 0:   #最低到0

            lis[p-1] -= 1

    for q in range(N):

        if lis[q] >= 3:   #当优先级>3便加入或者更改

            dic[q+1] = lis[q]

for k in list(dic):   #优先级<=3,便删除

    if int(dic[k]) <= 3:

        dic.pop(k)

print(len(dic))

END

实习编辑   |   王文星

责       编   |   周茂林

 where2go 团队


   

微信号:算法与编程之美          

长按识别二维码关注我们!

温馨提示:点击页面右下角“写留言”发表评论,期待您的参与!期待您的转发!

你可能感兴趣的:(Python|外卖店优先级)