问题描述
外卖系统中维护着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)) |