代码实现
import java.util.*;
/*
* N家外卖店
* M个订单
* T时刻
* */
public class TestG {
public static void main(String[] args) {
// 读取店铺数量n,订单数量m,时间t,
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int t = sc.nextInt();
// 读取各时刻订单信息
Map<Integer, LinkedList<Integer>> timeOrder = new TreeMap<>();
for (int i = 0; i < m; i++) {
int time = sc.nextInt();
int order = sc.nextInt();
if (timeOrder.containsKey(time)) {
timeOrder.get(time).addLast(order);
continue;
}
LinkedList<Integer> orderList = new LinkedList<Integer>();
orderList.addLast(order);
timeOrder.put(time, orderList);
}
System.out.println(getNum(n, timeOrder, t));
}
public static int getNum(int n, Map<Integer, LinkedList<Integer>> timeOrder, int t) {
// 初始化店铺,key为店铺编号,value为当前优先级
HashMap<Integer, Integer> stores = new HashMap<Integer, Integer>();
HashSet<Integer> cache = new HashSet<Integer>();
for (int i = 1; i <= n; i++) {
stores.put(i, 0);
}
// 遍历时间,更新优先级
for (int i = 1; i <= t; i++) {
// 如果i时刻存在订单
if (timeOrder.containsKey(i)) {
// 获取i时刻的订单列表
LinkedList<Integer> orders = timeOrder.get(i);
// j为有订单的店铺
for (int j : orders) {
// 对有订单店铺的优先级加2
stores.put(j, stores.get(j) + 2);
if (stores.get(j) > 5) {
if (!cache.contains(j)) {
cache.add(j);
}
}
}
// 无订单的店铺优先级减一
for (int k = 1; k <= n; k++) {
if (orders.contains(k)) {
continue;
}
if (stores.get(k) != 0) {
stores.put(k, stores.get(k) - 1);
// 当优先级小于等于3时,移出缓存
if (stores.get(k) <= 3) {
if (cache.contains(k)) {
cache.remove(k);
}
}
}
}
} else {
// 所有优先级不为0的店铺的优先级减一,为0的不做操作
for (int k = 1; k <= n; k++) {
if (stores.get(k) != 0) {
stores.put(k, stores.get(k) - 1);
// 当优先级小于等于3时,移出缓存
if (stores.get(k) <= 3) {
if (cache.contains(k)) {
cache.remove(k);
}
}
}
}
}
}
return cache.size();
}
}