蓝桥杯——历届真题 外卖店优先级-python

问题描述
  “饱了么”外卖系统中维护着N 家外卖店,编号1 N。每家外卖店都有
  一个优先级,初始时(0 时刻) 优先级都为0。
  每经过1 个时间单位,如果外卖店没有订单,则优先级会减少1,最低减
  到0;而如果外卖店有订单,则优先级不减反加,每有一单优先级加2。
  如果某家外卖店某时刻优先级大于5,则会被系统加入优先缓存中;如果
  优先级小于等于3,则会被清除出优先缓存。
  给定T 时刻以内的M 条订单信息,请你计算T 时刻时有多少外卖店在优
  先缓存中。
输入格式
  第一行包含3 个整数N、M 和T。
  以下M 行每行包含两个整数ts 和id,表示ts 时刻编号id 的外卖店收到
  一个订单。
输出格式
  输出一个整数代表答案。
样例输入
2 6 6
1 1
5 2
3 1
6 2
2 1
6 2
样例输出
1

**思路:**使用temp记录每时每刻的订单,temp[i]对应的是i时刻的订单。使用grade记录外卖店信息,grade[i]对应的是外卖店i的信息,信息包含3个(a,b,c)。a:当前适合外卖店的优先级;b:外卖店是否处于优先缓存中;c:外卖店在j时刻前是否优先级为0。将优先级>0的在j时刻都先优先级-1,所以在j时刻第一次遍历到外卖店i的订单时,优先级要+3,而不是+2,在j时刻再次遍历到外卖店i的订单时,只需要+2。最终遍历所有的grade[i][1]==1的即在优先缓存中。

#N是N家外卖店  M条信息  求T时刻位于优先级的
N,M,T=map(int,input().split())
temp=[[] for i in range(T+1)]
for i in range(M):
    a,b=map(int,input().split())
    temp[a].append(b)
#grade记录每时每刻外面店i的优先级以及是否在优先缓存中(0\1),与是否进行了-1(进行了就是1 没进行就是0)
grade=[[]for i in range(N+1)]
for i in range(1,N+1):
    grade[i].append(0)
    grade[i].append(0)
    grade[i].append(0)

for i in range(1,T+1):
    for n in range(1,N+1):
        grade[n][2] = 0
        if grade[n][0]>0:
            grade[n][0] -= 1
            grade[n][2]=1
            if grade[n][0]<=3 and grade[n][1]==1:    #出优先缓存
                grade[n][1]=0

    lenth=len(temp[i])
    for j in range(lenth):
        x=temp[i][j]
        if grade[x][2]==1:
            grade[x][0]+=3
            grade[x][2]=0
        else:
            grade[x][0]+=2
        if grade[x][0]>5 and grade[x][1]==0:
            grade[x][1]=1

result=0
for i in range(1,N+1):
    if grade[i][1]==1:
        result+=1
print(result)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值