蓝桥杯javaB组--外卖店优先级

老子叫甜甜 提交于 2019-12-05 11:42:24

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

    }

}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!