【问题描述】
“饱了么”外卖系统中维护着 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());
}
}