【蓝桥杯真题--送外卖 代码的尽头是送外卖】
第七题:外卖店优先级
题目描述
“饱了么”外卖系统中维护着 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.*;public class a23 { public static int[] res; public static int n; public static int[] aaaa; public static void main(String[] args) { ArrayList list; ArrayList<List> lists = new ArrayList(); Scanner scanner = new Scanner(System.in); n = scanner.nextInt(); int m = scanner.nextInt(); int t = scanner.nextInt(); res = new int[t]; aaaa = new int[t]; for (int i = 0; i < t; i++) { list = new ArrayList(); int a = scanner.nextInt(); int b = scanner.nextInt(); list.add(a); list.add(b); lists.add(list); } Collections.sort(lists, new Comparator<List>() { @Override public int compare(List o1, List o2) { return o1.get(0) - o2.get(0); } }); for (int i = 0; i < t; i++) { aaaa[i] = i+1; } for (int i = 0; i < t; i++) { update(lists.get(i).get(0),lists.get(i).get(1)); } int qq = 0; for (int i = 0; i 3) qq++; } System.out.println(qq); } public static int dafual(int x) { if (x == 0) return 0; else return x - 1; } public static void update(int x,int y) { for (int q : aaaa) { int d = q-1; if (q == x) { res[d] += 2 * y; }else { int a = dafual(res[d]); res[d] = a; } } }}