蓝桥杯-外卖店优先级-python解法

简介: 蓝桥杯-外卖店优先级-python解法

题目描述


"饱了么"外卖系统中维护着 NN 家外卖店,编号 1 ∼ NN。每家外卖店都有 一个优先级,初始时 (0 时刻) 优先级都为 0。

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

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

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


输入描述


第一行包含 3 个整数 N,M,T

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

其中,1≤N,M,T≤105,1≤ts≤T,1≤id≤N。


输出描述


输出一个整数代表答案。


输入输出样例


示例

输入

1. 2 6 6
2. 1 1
3. 5 2
4. 3 1
5. 6 2
6. 2 1
7. 6 2

输出

1
样例解释:

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


运行限制


  • 最大运行时间:2s
  • 最大运行内存: 256M

思路:

先进行输入,用二维列表存储输入的ts,td。对二维数组根据时间进行排序。创建三个数组,order=[],prior=[],flag=[],分别存储第id号上一回订单的时间,id的优先级,该id是不是在缓存中。初始化为0。然后进行迭代,具体过程写在注释里。

1. first = input()
2. n,m,T=[int (i) for i in first.split()]
3. a=[]
4. 
5. for i in range(m):
6.     a.append([int(i) for i in input().split()])
7. 
8. #对订单的的时间进行排序,目的是算出当前订单与上一回订单之间的间隔
9. #从未计算出这家店没有订单的时候优先级下降数
10. #即:prior[idd] -= tt-order[idd]-1
11. a=sorted(a,key=lambda a:a[0])
12. 
13. order=[]#订单的时刻
14. prior=[]#优先级的分数
15. flag=[]#是否在优先缓存中
16. #初始化为0
17. order=[0 for i in range(n+1)]
18. prior=[0 for i in range(n+1)]
19. flag=[0 for i in range(n+1)]
20. 
21. #遍历每一条订单信息
22. for i in range(m):
23.     tt=a[i][0]
24.     idd=a[i][1]
25.     #如果当前订单的时间不等于上次的订单
26.     #由题意每过一秒优先级减1,所以优先级减去间隔
27. if tt != order[idd]:
28.         prior[idd] -= tt-order[idd]-1
29. if prior[idd]<0: prior[idd]=0#优先级最低为0
30. if prior[idd]<=3: flag[idd]=0
31.     prior[idd]+=2  #有订单则优先级加2
32. if prior[idd]>5: flag[idd]=1
33. order[idd]=tt  #记录这次订单的时间,下此迭代使用
34. 
35. #处理到了T时刻的情况
36. for i in range(1,n+1):
37.     #如果最后一个订单不是T时刻的
38.     #要减去最后一趟订单时间与t的差的绝对值
39. if order[i] <T:
40.         prior[i]-=T-order[i]
41. if prior[i]<=3: flag[i]=0
42. 
43. #遍历求在缓存区的商家个数
44. ans=0
45. for i in range(n+1):
46. if( flag[i]>0):
47.         ans+=1
48. print(ans)
目录
相关文章
|
6月前
|
Python
Python系列(7)—— 运算符的优先级
Python系列(7)—— 运算符的优先级
|
20天前
|
Python
蓝桥杯练习题(一):Python组之入门训练题
这篇文章是关于蓝桥杯Python组的入门训练题,包括Fibonacci数列、圆的面积、序列求和和A+B问题的具体代码实现和样例输出。
85 0
|
20天前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
36 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
20天前
|
人工智能 Python
蓝桥杯练习题(四):Python组之历届试题三十题
关于蓝桥杯Python组历届试题的三十个练习题的总结,包括题目描述、输入输出格式、样例输入输出以及部分题目的解题思路和代码实现。
15 0
蓝桥杯练习题(四):Python组之历届试题三十题
|
20天前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(二):Python组之基础练习三十题
蓝桥杯Python编程练习题的集合,包含了三十个不同难度的编程题目,覆盖了基础语法、数据结构和算法等领域。
16 0
|
23天前
|
消息中间件 存储 NoSQL
python 使用redis实现支持优先级的消息队列详细说明和代码
python 使用redis实现支持优先级的消息队列详细说明和代码
33 0
|
3月前
|
数据可视化 JavaScript 前端开发
Python中的数据可视化:从基础到进阶深入理解操作系统:进程调度与优先级
【8月更文挑战第29天】数据可视化是现代数据分析不可或缺的一环。本文将引导读者通过Python这一强大的编程语言,利用其丰富的库和工具,探索数据可视化的奥秘。我们将从最基础的图表开始,逐步深入到更复杂的可视化技术,最终实现高级定制和交互式可视化。无论你是数据科学新手还是希望提升可视化技能的开发者,这篇文章都将为你打开一扇通往数据美学的大门。
|
5月前
|
存储 机器学习/深度学习 算法
皇后之战:揭秘N皇后问题的多维解法与智慧【python 力扣52题】
皇后之战:揭秘N皇后问题的多维解法与智慧【python 力扣52题】
|
5月前
|
存储 算法 数据挖掘
高效搜索技巧:最小覆盖子串解法【力扣75题 python】
高效搜索技巧:最小覆盖子串解法【力扣75题 python】
|
5月前
|
SQL 算法 数据挖掘
探索有效括号 力扣第20题:从栈到递归的多角度解法 【含图解 python】
探索有效括号 力扣第20题:从栈到递归的多角度解法 【含图解 python】