蓝桥杯 外卖店优先级(JAVA)
问题描述
“饱了么”外卖系统中维护着 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
算法思路
由分析可知,如果我们可以建立一张店铺订单数量和时刻相关联的表,则可以很清楚的计算各时刻各店铺的优先级数。因而我们可以借助二维数组orderTable(店铺id为行,时刻t为列)来表示该表,然后遍历该数组并逐个计算各时刻下各店铺的优先级数,如果符合条件则加入map中并以店铺id为key值,若不符合条件则将其移出,最后查看map中有多少项,即可。
算法如下
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int shops = input.nextInt();//店铺数量
int orders = input.nextInt();//订单数量
int time = input.nextInt();//T时刻
int[][] orderTable = new int[shops+1][time+1];//存储各店铺各时刻的订单数量
int[] shopCounts = new int[shops+1];//T时刻,店铺的优先级数
HashMap<Integer,Integer> shopMap = new HashMap();//作为优先缓存
for (int i = 0; i < orders; i++) {
int ts = input.nextInt();//订单时刻
int id = input.nextInt();//接收订单的店铺
if(ts <= time){//在T时刻表中的订单状态
orderTable[id][ts]++;
}
}
for (int i = 1; i <= shops; i++) {
for (int j = 1; j <= time; j++) {
if(orderTable[i][j] == 0){
shopCounts[i] = Math.max(0,shopCounts[i] - 1);//当店铺i在j时刻,无订单且优先级数不为零时自减1
}else{
shopCounts[i] += orderTable[i][j] * 2;//当店铺i在j时刻,有订单则将此时刻该店铺的订单数量×2
}
//判断优先级数,确定是否加入优先缓存
if(shopCounts[i] > 5){//当店铺优先级数首次大于5时将其加入优先缓存中
shopMap.put(i,1);
}else if(shopCounts[i] <= 3 && shopMap.containsKey(i)){//当店铺已经加入到优先缓存且优先级数小于等于3时,剔除出去
shopMap.remove(i);
}
}
}
System.out.println(shopMap.size());//此时map的大小即为优先缓存中的店铺数量
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义