码迷,mamicode.com
首页 > 编程语言 > 详细

java 外卖店优先级

时间:2020-02-12 00:49:40      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:程序   span   维护   检测   state   can   判断   开始   oid   

【问题描述】 “饱了么”外卖系统中维护着 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 号) 在优先缓存中。

 

把要求的时间点ti前的情况放进去二维数组,再去ti判断是否在队列。

public class Main {

    public static void main(String args[]) {

        int t = 0, w = 0;
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();
        int[][] state = new int[c+1][a+1];
//        long start = System.currentTimeMillis();   //要测试的程序或方法 个人用来检测运行时间的。
        
        for(int i = 0; i <= c; i++)
            for(int j = 0; j <= a; j++)
                state[i][j] = -1;
//        for(int i = 0; i <= a; i++) state[0][i] = 0;
        Arrays.fill(state[0], 0);     //---------Java所谓的的二维数组,只有a{{},{}},把第一行填充0,用于接下去的加
        for(int i = 0; i < b; i++) {
            t = sc.nextInt();
            w = sc.nextInt();
            if(t > c) continue;
            if(state[t][w] == -1) state[t][w] = 0;
            state[t][w] += 2;
        }
        
        
        for(int i = 1; i <= a; i++) {
            for(int j = 1; j <= c; j++) {
                state[j][i] = state[j-1][i] + state[j][i];
                if(state[j][i] < 0) state[j][i] = 0;

            }
        }
        //     -----------下面开始判断-------------
//        ArrayList<Integer> jilu = new ArrayList<Integer>();
        int sign = 0, index = 0;
        int num = 0;
        for(int i = 1; i <= a; i++) {
            sign = state[c][i];
            index = c;
            while(sign == 4 || sign == 5) {
                sign = state[--index][i];
            }
            if(sign > 5) {
                num++;
            }
        }
        System.out.println(num);
        
//        long end = System.currentTimeMillis();
//        System.out.println("程序运行时间:"+(end-start)+"ms");
        
    }
}

 

java 外卖店优先级

标签:程序   span   维护   检测   state   can   判断   开始   oid   

原文地址:https://www.cnblogs.com/ohuo/p/12297366.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!