饱了么外卖

题目描述

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

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

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

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

【输入格式】

第一行包含 3 个整数 N、M 和 T。

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

【输出格式】

输出一个整数代表答案。

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

import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;


public class Demo_06 {
	static int[][] host;
	static int[][] store;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int M = sc.nextInt();
		int T = sc.nextInt();
		host = new int[N][2];
		int[][] store = new int[M][2];
		Set<Integer> prior = new HashSet<Integer>();
		
		for (int i = 0; i < M; i++) {
			store[i][0] = sc.nextInt();//ts时刻
			store[i][1] = sc.nextInt();//商店编号
		}
		
		//每个单位时间取扫描store中的值
		for (int i = 1; i < T+1; i++) {
			//重置标记
			if (i != 1) {
				for (int k = 0; k < host.length; k++) {
					host[k][1] = 0;
				}
			}
			
			for (int j = 0; j < store.length; j++) {
				
				
				//如果该时刻与store中存储的时刻相同
				if (check(i, store[j][0])) {
					//则在服务器中将该值商店编号的优先级+2
					host[store[j][1]-1][0] += 2;
					//标记
					host[store[j][1]-1][1] = 1;
				}
			}
			
			//若不满足条件则-2
			for (int k = 0; k < host.length; k++) {
				if (host[k][0] - 1 >= 0 && host[k][1] == 0) {
					host[k][0] -= 1;
				}
			}	
		}
		
		//如果该值大于或等于5则将数据存入prior中,过滤掉重复的
		for (int j = 0; j < host.length; j++) {
			if (host[j][0] > 5) {
				prior.add(j+1);
			}
		}
		//显示外卖店个数
		System.out.println(prior.size());
	

	}

	private static boolean check(int s, int t) {
		return (s == t) ? true : false;

}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值