第七题:外卖店优先级
题目描述
“饱了么”外卖系统中维护着 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<Integer> list;
ArrayList<List<Integer>> 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<Integer>>() {
@Override
public int compare(List<Integer> o1, List<Integer> 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 < t; i++) {
if (res[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;
}
}
}
}