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

第七题:外卖店优先级
题目描述
“饱了么”外卖系统中维护着 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;
            }
        }
    }

}

<think>嗯,用户想找蓝桥杯与食堂相关的真题或解题思路。首先,我需要回顾一下用户提供的引用内容,看看是否有相关的信息。引用[3]提到了食堂同寝室同时就餐的问题,这可能就是用户需要的题目类型。那篇引用中提到了a3>1和a3==1的情况,涉及到六人桌和四人桌的安排,可能是一道关于资源分配或排队的算法题。 接下来,我需要确定用户的具体需求。他们可能在准备蓝桥杯竞赛,遇到了食堂相关的题目,或者想练习这类问题。用户提供的引用中,引用[3]具体描述了一个场景,需要处理不同桌型的占用情况,可能涉及条件判断和逻辑分析。 然后,我需要分析这类题目的解题思路。通常,这类问题会考察模拟、贪心算法动态规划。比如,根据不同的餐桌占用情况,合理安排学生就餐,可能需要优先安排大桌以减少资源浪费,或者根据现有条件调整策略。例如,引用[3]中的情况,当六人桌全被占时,需要排空四人桌,这可能涉及到如何最优利用现有资源。 此外,用户提供的其他引用,如引用[1]和[2],提到蓝桥杯侧重思维和基础,尤其是数学方面的考察。这可能意味着食堂相关的题目不仅仅是编程实现,还包含数学建模或逻辑推理的部分。例如,计算最优的座位安排,或者处理时间冲突的问题。 接下来,我应该整理可能的解题步骤。首先,明确题目中的变量和条件,比如不同桌型的数量、学生的分组情况等。然后,确定优先级,比如先安排大桌还是小桌,如何处理剩余人数。之后,编写条件判断来处理各种情况,比如当六人桌不够时如何处理,四人桌的安排等。 另外,需要考虑边界情况,例如当没有足够桌子时的处理,或者当学生人数正好整除桌型的情况。同时,可能涉及到数据结构的选择,比如使用数组来记录各桌型的占用情况,或者用变量来跟踪可用数量。 最后,根据引用[3]中的例子,当a3>1时,说明六人桌已满,需要排空四人桌。这可能意味着当某些条件满足时,必须调整其他资源的使用。因此,在解题时,需要仔细处理这些条件,确保所有可能的情况都被覆盖。 总结来说,用户需要的是关于蓝桥杯中食堂场景的算法题解析,可能涉及模拟和条件判断,重点在于资源分配和逻辑处理。接下来,我需要将这些思路整理成清晰的步骤,并提供示例代码和可能的相关问题,帮助用户更好地理解和应用。</think>根据蓝桥杯真题中与食堂相关的题目特点,这类问题通常涉及逻辑分析、资源分配或时间规划。以下结合引用内容整理解题思路及示例: --- ### **食堂就餐问题典型解题思路** 1. **问题建模** 根据题目描述(如引用[3])建立变量表示餐桌状态: - 使用$a_3$表示六人桌的占用情况($a_3>1$表示六人桌全被占用) - 使用$b_6$表示六人桌剩余数量 - 类似地定义四人桌、双人桌的变量 2. **优先级分配策略** - 优先安排大桌以减少资源浪费,例如六人桌 > 四人桌 > 双人桌 - 根据剩余人数调整策略,如引用[3]提到:当$a_3>1$时,六人桌已满,需排空四人桌 3. **条件判断实现** 结合逻辑分支处理不同场景: ```python if a3 > 1: # 六人桌全被占 if b6 == 0: # 无空六人桌 # 排空四人桌的逻辑 elif a3 == 1 and a2 == 0: # 四人桌与六人桌等效处理 ``` --- ### **示例代码框架(模拟就餐安排)** ```python def arrange_students(students, tables): # tables格式示例:{"six": 3, "four": 2, "two": 5} remaining = students # 优先安排六人桌 while remaining >= 6 and tables["six"] > 0: remaining -= 6 tables["six"] -= 1 # 处理四人桌 while remaining >= 4 and tables["four"] > 0: remaining -= 4 tables["four"] -= 1 # 处理双人桌(可能需要组合) needed_two = (remaining + 1) // 2 # 向上取整 if tables["two"] >= needed_two: return True # 可安排 else: return False # 无法安排 ``` --- ### **真题拓展分析** 引用[3]中提到的条件$a_3>1$与$b_6$的关系,可能出现在以下场景: - **动态资源调整**:当六人桌全满时,需重新分配四人桌资源 - **冲突避免**:同一寝室学生需同时就餐,需保证餐桌连续可用性 --- ### **相关问题** 1. 如何优化食堂餐桌分配的算法以减少等待时间? 2. 如何处理多人桌与双人桌组合使用的场景? 3. 蓝桥杯真题中类似食堂问题的数学模型如何构建? --- 通过上述方法可系统化解决食堂类资源分配问题,重点在于条件分支的完整性和资源利用的优先级设计[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

海边的彩虹与你

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

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

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

打赏作者

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

抵扣说明:

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

余额充值