第十届蓝桥杯大赛软件类省赛Java大学B组 试题 G: 外卖店优先级
时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分
【问题描述】 “饱了么”外卖系统中维护着 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
代码如下:
import java.util.*;public class 外卖优先级 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = scanner.nextInt();int M = scanner.nextInt();int T = scanner.nextInt();int[][] ints_time_number = new int[M][T]; //存放时刻和店号的数组int result = 0; //最后,在优先缓存区里的店的个数HashMap<Integer,Integer> hashMap = new HashMap<>();for (int i = 1; i <= N; i++) {hashMap.put(i,0);}Set<Integer> set = hashMap.keySet();for (int j = 0; j < M; j++) {ints_time_number[j][0] = scanner.nextInt(); //时刻ints_time_number[j][1] = scanner.nextInt(); //店号}for(int i=0; i<M-1; i++){for(int j=0; j<M-1-i; j++){if(ints_time_number[j][0] > ints_time_number[j+1][0]){int temp = ints_time_number[j][0];ints_time_number[j][0] = ints_time_number[j+1][0];ints_time_number[j+1][0] = temp;}}}ArrayList<Integer> arrayList = new ArrayList<>();for (int i = 0; i < T; i++) {arrayList.add(i+1);}for (Integer k : set) {for (int i = 0; i < M; i++) {if (ints_time_number[i][1] == k) { //看店号hashMap.put(k, hashMap.get(k) + 2);} else {hashMap.put(k, hashMap.get(k) - 1);if (hashMap.get(k) < 0) {hashMap.put(k, 0);}}}}Set<Integer> set1 = new HashSet<>();for (int i = 0; i < arrayList.size(); i++) {set1.add(ints_time_number[i][0]);}//比较 去重后的 与 不去重的 个数,求差值int no_exist = arrayList.size() - set1.size();for (int i = 0; i < no_exist; i++) {for (Integer n:set) {hashMap.put(n,hashMap.get(n)-1);if (hashMap.get(n) < 0) {hashMap.put(n,0);}}}for (Integer integer: set) {if (hashMap.get(integer) > 5) {result ++;}}System.out.println(result);}
}
重点:
一、将时间由小到大排序了后,即可得到时间排序后的对应的店家号码,遍历号码,一次与键比较,如果相同,则优先级加2,如果不相同就减1。
二、针对有的时间点没有订单,思想如下:
时间点: 1 2 3 5 6 6
arraylist:1 2 3 4 5 6
将时间点放进set中去重,可得知重复元素的个数是多少,也就是有多少个时间点没有订单,则需要将每个店家的优先级都减1.
第十届蓝桥杯大赛软件类省赛Java大学B组 试题 G: 外卖店优先级相关推荐
- 第十届蓝桥杯大赛软件类省赛 JAVA 大学 A 组
迷宫 本题总分:10 分 [问题描述] 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方. 010000 000100 001001 110000 迷宫的入口为左 ...
- 2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解
============================== 2019-2021蓝桥杯C++ C组真题题解: 2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解 2020第十一届蓝桥杯大赛软件类省 ...
- 2019第十届蓝桥杯大赛软件类省赛C++ B组真题题解
========================================== 2019-2021蓝桥杯C++ B组真题题解: 2019第十届蓝桥杯大赛软件类省赛C++ B组真题题解 2020第 ...
- 蓝桥杯软件类比赛java,第十届蓝桥杯大赛软件类省赛
第十届蓝桥杯大赛软件类省赛 这些题官网还没有解答的,我主要参考了b站UP主大雪菜的解法(绝大部分题先自己做了一遍),当然也网上查了一些解答,但发现现在网上的一些解法并不正确,希望可以给大家一个参考. ...
- 2019 第十届蓝桥杯大赛软件类省赛 C/C++ 大学 A 组 【部分题解】
声明: 这些的答案不是官方答案,都是我自己做的,仅供参考.一起加油 试题 A: 平方和 本题总分:5′5 '5′ [问题描述] 小明对数位中含有 2.0.1.92. 0. 1. 92.0.1.9 的数 ...
- 第十届蓝桥杯大赛软件类省赛
其他组见以下链接. 第十届蓝桥杯所有的题 一.研究生组 试题 A: 立方和 本题总分:5 分 [问题描述] 小明对数位中含有 2.0.1.9 的数字很感兴趣,在 1 到 40 中这样的数包 括 1.2 ...
- 2、数的分解 - 2019年第十届蓝桥杯大赛软件类省赛
问题 [问题描述] 把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包 含数字 2 和 4,一共有多少种不同的分解方法? 注意交换 3 个整数的顺序被视为同一种方法,例如 10 ...
- 1、数列求值 - 2019年第十届蓝桥杯大赛软件类省赛
问题 [问题描述] 给定数列 1, 1, 1, 3, 5, 9, 17, -,从第 4 项开始,每项都是前 3 项的和.求第 20190324项的最后 4 位数字. #include <iost ...
- 第十届蓝桥杯大赛软件类省赛C++研究生组
这比赛题目 A 立方和(5,√) B 字串数字(5, √) C 质数(10, √) D 最短路(10, √) E RSA解密(15) F Fibonacci数列与黄金分割(15, √) G 扫地机器人 ...
最新文章
- Copying Files
- 教育学专硕考试科目计算机,2017考研:哪些专业的考试科目相同?
- opencv findContours 崩溃CrtDbgBreak
- java代码上传到私服,java生成 java代码 上传maven私服
- hdf5与hdfs的区别
- ABAP事务码SAT里的Gross time and net time
- java 输出编码_从代码看java输入输出中的编码和解码
- PAT_B_1058_Java(20分)
- 数据结构 【实验3 链表基本操作】
- 【转】关于输出用%lf和%f的问题
- SNS网站中怎样获取MSN联系人信息
- 五种提高 SQL 性能的方法
- vc6.0怎么新建c语言项目
- Tomcat安装配置
- 查看dll文件的两种办法
- FFmpeg编码(YUV转H264)并改变视频分辨率示例
- 微信小程序php签到功能,小程序签到功能的作用
- 软件测试的类型有那些?都有什么不同?
- Lucas(卢卡斯)定理 【数论】
- 为什么数据库具有很高的独立性