【問題描述】
“飽了么”外賣系統中維護着 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()); } }