zoukankan      html  css  js  c++  java
  • java 外卖店优先级

    【问题描述】 “饱了么”外卖系统中维护着 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");
            
        }
    }
  • 相关阅读:
    OJ 之 FATE
    hdu 1701 (Binary Tree Traversals)(二叉树前序中序推后序)
    POJ 1789 Truck History
    数据结构之 普利姆算法总结
    HDU OJ 2159 FATE
    The Great Pan
    2014年的暑假ACM之旅!
    0-1背包问题
    中国剩余定理的解释!
    POJ 1183 反正切函数的应用
  • 原文地址:https://www.cnblogs.com/ohuo/p/12297366.html
Copyright © 2011-2022 走看看