蓝桥杯真题--送外卖 代码的尽头是送外卖

第七题:外卖店优先级
题目描述
“饱了么”外卖系统中维护着 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 号) 在优先缓存中。
【评测用例规模与约定】

对于 80% 的评测用例,1≤ N,M,T ≤10000。
对于所有评测用例,1≤ N,M,T ≤100000,1≤ts≤T,1≤id ≤ N。

时间限制:1.0s

内存限制:512.0MB
题目分析
题目代码
 

import java.util.*;

public class a23 {

    public static int[] res;
    public static int n;
    public static int[] aaaa;
    public static void main(String[] args) {

        ArrayList<Integer> list;
        ArrayList<List<Integer>> lists = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        int m = scanner.nextInt();
        int t = scanner.nextInt();

        res = new int[t];
        aaaa = new int[t];

        for (int i = 0; i < t; i++) {

            list = new ArrayList<>();
            int a = scanner.nextInt();
            int b = scanner.nextInt();

            list.add(a);
            list.add(b);
            lists.add(list);
        }

        Collections.sort(lists, new Comparator<List<Integer>>() {
            @Override
            public int compare(List<Integer> o1, List<Integer> o2) {
                return o1.get(0) - o2.get(0);
            }
        });

        for (int i = 0; i < t; i++) {

            aaaa[i] = i+1;
        }

        for (int i = 0; i < t; i++) {

            update(lists.get(i).get(0),lists.get(i).get(1));
        }



        int qq = 0;

        for (int i = 0; i < t; i++) {

            if (res[i] > 3)
                qq++;
        }

        System.out.println(qq);
    }

    public static int dafual(int x) {

        if (x == 0)
            return 0;
        else
            return x - 1;
    }

    public static void update(int x,int y) {

        for (int q : aaaa) {

            int d = q-1;
            if (q == x) {

                res[d] += 2 * y;
            }else {

                int a = dafual(res[d]);
                res[d] = a;
            }
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海边的彩虹与你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值