蓝桥杯——外卖店优先级

外卖店优先级

题目分析

这一题一看N,M,T的范围就知道不能暴力,要讨巧,怎么讨巧是重点。正常的思路是第一层for循环遍历订单(或者外卖店),第二层for循环遍历外卖店(或者订单),这样可以求出每个外卖店是不是在缓存里面,但是时间复杂度是 O ( N ∗ M ) = 1 e 10 > 1 e 8 O(N*M)=1e10>1e8 O(NM)=1e10>1e8,明显是不行的。

说一下讨巧的思路,订单我是必然要遍历的不然你不知道哪个外卖店有单子,那么可以不遍历外卖店吗?这就看我们如何处理订单了。订单应该是一个类,包含时间ts和外卖店id,我们优先对订单按照外卖店id排序,id相同时再按照ts排序,排序规则如下,

static class message implements Comparable<message>{//存储订单信息int id,t;//订单的id和时间public message(int t, int id) {this.id = id;this.t = t;}@Overridepublic int compareTo(message o) {if(this.id != o.id) {return this.id-o.id;}else {return this.t-o.t;}			}		}

现在可以开始遍历订单了,在遍历的时候我要记录两个值,一个是cnt用来表示当前外卖店的优先级大小,一个是flag用来表示当前外卖店是否被放在缓存里面。一个是ans表示我知道的在缓存里面的外卖店的数量。

int flag = 0;//表示是否在优先级缓存中,在的flag=1,
int ans = 0;//记录答案
int cnt = 2;//表示外卖店的优先级大小

对于当前订单me[i],我要知道前一个订单me[i-1]是否和他是同一个外卖店,如果是,那么说明我此时把me[i-1].id的外卖店的单子都遍历完了,此时我要确定他是不是在缓存里面。两步确定法,一是确定flag是否等于1,二十确定从最后一个单子的时间到时间t内,是否会使他的优先级减少到小于等于3的情况。

if(me[i].id!=me[i-1].id) {//如果变成下一个外卖店了,就要检查刚刚那个外卖店是不是在缓存中的//falg=1并且到达t时,没有小于等于3if(flag == 1 && (cnt - (t - me[i-1].t) > 3 )) {ans++;}cnt = 2;//此时是me[i].id有单子,那么cnt初始值应该是2flag = 0;//重置flag
}

否则的话,先求从上一个订单到当前这个订单,外卖店的优先级降低了多少,也就是经历的时间。那么这里为什么是int diff = me[i].t - me[i-1].t - 1;呢?举个例子,假设当前的时间是4,前一个的时间是2,那么中间没有订单的时间就是ts=3时,因此优先级应该降低1,那么也就是4-2-1。但是注意,如果出现了当前的时间是4,前一个的时间也是4,会出现4-4-1=-1的情况,但是实际此时应该优先级降低0,所以会有if(diff == -1) diff = 0;。那么这个if(cnt <= 3)一定要在cnt += 2;之前判断,举个例子,假设外卖店的当前优先级是4,那么diff=2,4减2等于2,此时应该被移出优先级缓存的,但是如果在判断之前我先给他加了2,那么此时2+2=4>3,他就不会移出优先级缓存,造成结果错误。

else {int diff = me[i].t - me[i-1].t - 1;//优先级降低了多少 me[i].t=1  me[i-1].t=1if(diff == -1) diff =  0;cnt = Math.max(0, cnt - diff);//如果优先级降低到了负数,那么他就是0if(cnt <= 3) flag = 0;//如果小于等于3会被移出缓存cnt += 2;//出现了订单,优先级加2.if(cnt > 5) flag = 1;//如果大于5会被加入缓存
}

注意,最后一个外卖店,我没有判断它是否在缓存里面,所以for循环结束后要判断

//对最后一个订单/最后一个外卖店进行判断
if(flag == 1 && (cnt - (t - me[m-1].t) > 3 )) {ans++;
}
System.out.println(ans);

题目代码

import java.util.Arrays;
import java.util.Scanner;
public class Main{static class message implements Comparable<message>{//存储订单信息int id,t;//订单的id和时间public message(int t, int id) {this.id = id;this.t = t;}@Overridepublic int compareTo(message o) {if(this.id != o.id) {return this.id-o.id;}else {return this.t-o.t;}			}		}
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int t = scanner.nextInt();message[] me = new message[m];for (int i = 0; i < me.length; i++) {me[i] =new message(scanner.nextInt(), scanner.nextInt());}Arrays.sort(me);int flag = 0;//表示是否在优先级缓存中,在的flag=1,int ans = 0;//记录答案int cnt = 2;//表示外卖店的优先级大小for (int i = 1; i < m; i++) {if(me[i].id!=me[i-1].id) {//如果变成下一个外卖店了,就要检查刚刚那个外卖店是不是在缓存中的//falg=1并且到达t时,没有小于等于3if(flag == 1 && (cnt - (t - me[i-1].t) > 3 )) {ans++;}cnt = 2;//此时是me[i].id有单子,那么cnt初始值应该是2flag = 0;//重置flag}else {int diff = me[i].t - me[i-1].t - 1;//优先级降低了多少 me[i].t=1  me[i-1].t=1if(diff == -1) diff =  0;cnt = Math.max(0, cnt - diff);if(cnt <= 3) flag = 0;cnt += 2;if(cnt > 5) flag = 1;}}//对最后一个订单/最后一个外卖店进行判断//讲日期模拟器的时候,whie循环结束后,也得有一个if语句,对最后一个日期进行检查if(flag == 1 && (cnt - (t - me[m-1].t) > 3 )) {ans++;}System.out.println(ans);
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/719602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue中 computed 和 watch

在Vue框架中&#xff0c;computed和watch都用于响应数据的变化&#xff0c;但它们在使用上有着不同的侧重点和机制。具体分析如下&#xff1a; 1. 功能差异 computed是计算属性&#xff0c;它是基于它们的响应式依赖进行缓存的。只有当依赖的数据发生变化时&#xff0c;compu…

2827. 范围中美丽整数的数目

文章目录 题意思路代码 题意 题目链接 思路 按位dp暴力 代码 // 暴力 class Solution { public:int numberOfBeautifulIntegers(int low, int high, int k) {int l low / k;int r high / k;if (low % k)l;int ans 0;while (l < r){int tmp l * k;if (10 < tmp &…

华为数通方向HCIP-DataCom H12-821题库(多选题:61-80)

第61题 ACL 可分为如下哪些类别? A.用户自定义 ACL B.基本 ACL C.二层ACL D.高级ACL 【参考答案】ABCD 【答案解析】 A. 用户自定义 ACL (User-defined ACL): 这是用户根据自身需求自定义的 ACL,用于实现特定的访问控制策略。B.基本 ACL (Standard ACL): 基本 ACL 是基于源 …

OCP Secure boot必要特性

三点必需要求&#xff1a; The platform components must: 1. Provide a mechanism for securely anchoring a root of trust public key. // 提供一种用于安全地锚定信任根公钥的机制。 2. Verify the device firmware digital signature using the anchored public key /…

北京大学发布,将试错引入大模型代理学习!

引言&#xff1a;探索语言智能的新边界 在人工智能的发展历程中&#xff0c;语言智能始终是一个核心的研究领域。随着大语言模型&#xff08;LLM&#xff09;的兴起&#xff0c;我们对语言智能的理解和应用已经迈入了一个新的阶段。这些模型不仅能够理解和生成自然语言&#x…

动态规划(四)背包dp

01背包 完全背包 多重背包 二维费用背包 分组背包 混合背包

【算法分析与设计】组合

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 示例 1&…

25考研习题记录

3月 汤家凤《1800》 基础篇 日期高等数学线性代数概率论3.1 P92-93 P212-214 3.4 P10-15 P10-19 极限题62题 P73-74 P170-172 行列式17题 考研竞赛凯哥每日一题 张宇高数30讲页数3.4P74

【计算机学习】-- 电脑的组装和外设

系列文章目录 文章目录 系列文章目录前言一、电脑的组装1.CPU2.主板3.显卡4.硬盘5.内存6.散热器7.电源8.机箱 二、电脑外设选用1.显示器2.鼠标3.键盘4.音响 总结 前言 一、电脑的组装 1.CPU 返回目录 认识CPU CPU&#xff0c;即中央处理器&#xff0c;负责电脑资源的调度安…

计算机网络-网络安全(一)

1.网络安全威胁和漏洞类型&#xff1a; 窃听 假冒 重放 流量分析 破环完整 病毒 木马 诽谤 非授权访问 拒绝服务 漏洞&#xff1a;物理、软件、不兼容、其他等。 2.网络安全信息数据五大特征&#xff1a; 完整性&…

【.NET Core】深入理解IO - 读取器和编写器

【.NET Core】深入理解IO - 读取器和编写器 文章目录 【.NET Core】深入理解IO - 读取器和编写器一、概述二、BinaryReader和BinaryWriter2.1 BinartReader类2.2 BinaryWriter类 三、StreamReader和StreamWriter3.1 StreamReader类3.1 StreamWriter类StreamWriter类构造函数Str…

Leetcode 3072. Distribute Elements Into Two Arrays II

Leetcode 3072. Distribute Elements Into Two Arrays II 1. 解题思路2. 代码实现 题目链接&#xff1a;3072. Distribute Elements Into Two Arrays II 1. 解题思路 这一题不太明白为啥被划分为了hard的题目&#xff0c;我们只需要按照题意构造一下arr1和arr2即可&#xff…

优化自动窗帘系统

要优化自动窗帘系统的代码&#xff0c;我们可以考虑以下几个方面&#xff1a; (1)模块化设计&#xff1a;将不同的功能&#xff08;如读取光强度、控制窗帘等&#xff09;分解成独立的函数&#xff0c;以提高代码的可读性和可维护性。 (2)错误处理&#xff1a;增加错误处理机制…

【Vue】探究 Vue 2 与 Vue 3 生命周期:变化与延续

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

paper-ai :搜索真实文献并生成引用真实文献的AI论文

paper-ai &#xff1a;搜索真实文献并生成引用真实文献的AI论文。 项目简介 使用真实文献最快速完成论文的方法 利用人工智能撰写论文 人工智能书写功能&#xff1a;点击 "AI 写作 "进行正常对话互动。人工智能将根据您的输入提供写作建议或回答问题。 寻找文献功能…

C/C++工程师面试题(STL篇)

STL 中有哪些常见的容器 STL 中容器分为顺序容器、关联式容器、容器适配器三种类型&#xff0c;三种类型容器特性分别如下&#xff1a; 1. 顺序容器 容器并非排序的&#xff0c;元素的插入位置同元素的值无关&#xff0c;包含 vector、deque、list vector&#xff1a;动态数组…

DocxToDoc.java

DocxToDoc.java word高版本docx转化word2003版本 package word;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagrap…

【Ubuntu 20.04 / 22.04 LTS】最新 esp-matter SDK 软件编译环境搭建步骤

仓库链接&#xff1a;esp-matter SDK官方软件说明&#xff1a;ESP Matter Programming Guide官方参考文档&#xff1a;使用 Matter-SDK 快速搭建 Matter 环境 (Linux) 环境要求 Ubuntu 20.04 或 Ubuntu22.04网络环境支持访问 Gihub 在安装 esp-matter SDK 软件编译环境之前&a…

三八女神节特别推荐:完美礼物俘获她的芳心

三八女神节马上就要到了&#xff0c;这是一个赞颂女性独立、坚韧与美丽的时刻。在这个充满温馨与敬意的日子里&#xff0c;很多人想要为那些绽放光彩的女性们献上一份特别的礼物。这不仅是一份物质上的馈赠&#xff0c;更是一份心灵上的交流&#xff0c;一次情感上的共鸣。 真…

面试经典150题——简化路径

"A goal is a dream with a deadline." - Napoleon Hill 1. 题目描述 2. 题目分析与解析 2.1 思路一 这个题目开始看起来并不太容易知道该怎么写代码&#xff0c;所以不知道什么思路那就先模拟人的行为&#xff0c;比如对于如下测试用例&#xff1a; 首先 /代表根…