【问题描述】
“饱了么”外卖系统中维护着 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
public class Mdian { public int ts; public int id; public Mdian() { this.ts = 0; this.id = 0; } public Mdian(int a,int b) { this.ts = a; this.id = b; } } import java.util.List; import java.util.ArrayList; import java.util.Scanner; public class 外卖店优先级 { public static void main(String[] args) { Mdian mdian = new Mdian(); List<Mdian> list = new ArrayList(); Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); int M = scanner.nextInt(); int T = scanner.nextInt(); int [][] art = new int[N][2];//保存每家外卖店及优先级 for(int i=0;i<N;i++) { art[i][0]=i+1;//商家Id art[i][1]=0;//优先级都为0; } for(int i=0;i<M;i++) { Mdian mdian1 = new Mdian(); mdian1.ts = scanner.nextInt(); mdian1.id = scanner.nextInt(); list.add(mdian1); } List<Integer> li = new ArrayList();//用来保存某一时刻,有订单的店家 List<Integer> huncun = new ArrayList<>();//用来保存缓存店铺 for(int i=1;i<=T;i++)//从开始到T时刻 { li.clear(); for(Mdian mm : list)//遍历信息单 { if(mm.ts == i)//找到该时刻对应的店面 { int t = mm.id-1; art[t][1] +=2;//优先级+2; li.add(t+1);//把有订单的商品存入list中 } } for(int j=1;j<=N;j++)//将不再li中的店家减1 { if(li.indexOf(j)==-1)//不在里面 { if(art[j-1][1]>0) art[j-1][1] -=1; } } for(int k=1;k<=N;k++)//判断优先级是否加入或移出缓存。 { if(huncun.indexOf(k)==-1)//店家K不在缓存中 { if(art[k-1][1]>5)//优先级大于5 huncun.add(k); } else { if(art[k-1][1]<=3)//优先级小于等于3 { int index = huncun.indexOf(k);//找打list所移除目标下标 huncun.remove(index); } } } } System.out.print(huncun.size()); } }