栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

蓝桥杯2019年第八届javaB组第七题:外卖店优先级

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

蓝桥杯2019年第八届javaB组第七题:外卖店优先级

第七题:外卖店优先级
题目描述

“饱了么”外卖系统中维护着 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

【样例解释】

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

【评测用例规模与约定】

对于 80% 的评测用例,1≤ N,M,T ≤10000。
对于所有评测用例,1≤ N,M,T ≤100000,1≤ts≤T,1≤id ≤ N。

时间限制:1.0s

内存限制:512.0MB
 

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in);
		int N, M, T;
		
		N = in.nextInt();   //外卖店数
		M = in.nextInt();	//订单数
		T = in.nextInt();	//时刻

		Boolean[] level = new Boolean[N];	
        //判断外卖店是否处于优先队列,level[0]标志id=1的外卖店...

		ArrayList[] arr = new ArrayList[T];	
        //存放每个时刻有订单的外卖店id,如arr[0]存放ts=1时刻的订单信息...

		for(int i = 0; i < T; i++) {
			arr[i] = new ArrayList();	//
		}
		
		for(int i = 0; i < M; i++) {
			int ts = in.nextInt();    
			int id = in.nextInt();
			arr[ts - 1].add(id);    
            //ts-1为ts时刻对应的数组下标,如arr[0]保存ts=1时刻订单信息,arr[1]保存ts=2...
		}

		int[][] hunger = new int[N][2];    
        //hunger[i]保存id = i+1的外卖店的信息(i>=0),
        //hunger[i][0]保存id = i的外卖店的优先级,hunger[i][1]保存最近一次订单的时间
		
		for(int i = 0; i < T; i++) {	//遍历每个时刻
			for(int id : arr[i]) {    //遍历当前时刻所有订单
				hunger[id - 1][0] += 2;    //有订单+2
				hunger[id - 1][1] = i;    //保存订单时间
			}

			for(int j = 0; j < N; j++) {  

                //检查每个外卖店的优先级是否要-1,hunger[j][1]
                //若最近一次订单时间与i不相等,说明该外卖店在当前时刻无订单
				if(hunger[j][1] != i && hunger[j][0] != 0) {
					hunger[j][0] -= 1;
				}

                //检查每个外卖店是否处于优先队列
				if(hunger[j][0] > 5) {
					level[j] = true;
				}else if(hunger[j][0] <= 3) {
					level[j] = false;
				}
			}
		}

		int res = 0;
		for(int i = 0; i < N; i++) {
			if(level[i] == true) {
				res++;
			}
		}
		System.out.println(res);

		in.close();
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/735561.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号