前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python|外卖店优先级

Python|外卖店优先级

作者头像
算法与编程之美
发布2020-06-03 10:21:13
4250
发布2020-06-03 10:21:13
举报

问题描述

外卖系统中维护着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就行。

代码示例:

代码语言:javascript
复制
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 团队

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档