当前位置: 首页 > article >正文

P8685 [蓝桥杯 2019 省 A] 外卖店优先级--优先队列“数组”!!!!!

P8685 [蓝桥杯 2019 省 A] 外卖店优先级

    • 题目
  • 解析
    • 优先队列
      • 如何判断是否使用优先队列?
      • 省略规则
      • 优先队列常用操作
      • 大顶堆 vs 小顶堆
      • 定义队列h
      • 队列数组
    • 代码

题目

在这里插入图片描述

解析

每个外卖店会在不同的时间点收到订单,我们可以看见测试用例的时间顺序是不同的,而且有在相同时间内有多个订单的店铺

如果我们按输入的顺序来计算,显而易见是求不出来的,所以我们需要按时间顺序来处理订单,然后计算优先级,并判断是否在优先缓存中。

那么问题来了,我们应该如何对时间进行排序,用数组然后用sort?但是一个id,对应了多个时间点,一维数组显然难以实现,用二维数组?(不知道行不行,但是我知道太复杂了)

这里我们会想要一个以id来区分的存储器存储时间点,并且能够对时间点排序

没错没错,就只有他了优先队列数组【优先队列还不行,优先队列不能存储id】

优先队列的作用:
1.按时间顺序处理订单,避免手动排序的复杂性。
2.不同下标的队列数组,内容互不影响。
3.时间复杂度:每个订单插入和取出操作的时间复杂度为 O(log m),总复杂度为 O(m log m + n),适用于大规模数据。

找到存取id和时间点的最佳容器后,我们需要遍历每一个id,计算时间点,判断是否在优先缓存中。

注意:题目中问的是t时刻,有些店铺在t时刻前就没有订单了,我们还需计算最后一个时刻到t时刻减少的优先级

if (last != t) {pri -= (t - last);if (pri < 0)pri = 0;}if (in && pri <= 3)in = false;

优先队列

priority_queue<int, vector<int>, greater<int>> h;

优先队列 (priority_queue):
是 C++ 中一种特殊的数据结构,它和普通队列(先进先出)不同,元素的出队顺序由优先级决定。
它是 C++ STL 中的一种容器,默认是大顶堆(队首元素最大)。
但这里通过 greater 指定为小顶堆(队首元素最小)。
priority_queue 的完整模板参数列表如下:

如何判断是否使用优先队列?

1.是否要求动态获取最大值/最小值?
是 → 优先队列。
2.是否需要按特定顺序处理元素?
是 → 优先队列。
3.是否涉及贪心策略(每次选最优解)?
是 → 优先队列。

省略规则

template<class T,                          // 元素类型(必须明确指定)class Container = vector<T>,      // 底层容器(默认是 vector<T>)class Compare = less<T>          // 比较函数(默认是大顶堆)
> 
class priority_queue;

元素类型 T:必须明确指定(如 int)。

底层容器 Container:可以省略,默认用 vector。
比较函数 Compare:可以省略,默认用 less(大顶堆)。

什么时候可以完全省略?
大顶堆(默认行为):可以省略底层容器和比较函数:

priority_queue<int> h; // 等价于 priority_queue<int, vector<int>, less<int>>

优先队列常用操作

在这里插入图片描述

大顶堆 vs 小顶堆

在这里插入图片描述

定义队列h

#include <bits/stdc++.h>
using namespace std;int main() {priority_queue<int, vector<int>, greater<int>> h; // 单个队列for (int i = 0; i < 3; i++) {int x;cin >> x;h.push(x); // 所有元素插入同一个队列}while (!h.empty()) {cout << h.top() << ' '; // 按小顶堆顺序输出:1 2 3h.pop();}return 0;
}

队列数组

下述定义的为队列数组h[n],每个队列都是相互独立的,队列自动排序。

#include <bits/stdc++.h>
using namespace std;int main() {priority_queue<int, vector<int>, greater<int>> h[3]; // 3 个队列// 为每个队列插入多个元素h[0].push(3);h[0].push(1);h[0].push(2); // 队列0排序后:1 2 3h[1].push(5);h[1].push(4);              // 队列1排序后:4 5// 输出每个队列的内容for (int i = 0; i < 3; i++) {while (!h[i].empty()) {cout << h[i].top() << ' ';h[i].pop();}cout << endl;}return 0;
}

代码

#include <bits/stdc++.h>
using namespace std;
int n, t, m, cnt;int main() {cin >> n >> m >> t;//建优先队列数组priority_queue<int, vector<int>, greater<int>> h[100010];for (int i = 1; i <= m; i++) {int ts, id;cin >> ts >> id;h[id].push(ts);}//遍历每家店铺for (int i = 1; i <= n; i++) {int last = 0, pri = 0;//last:上一次订单时间,pri:记优先级bool in = false;//判定是否在优先级队列中//遍历商铺的所有订单while (!h[i].empty()) {int x = h[i].top();//x时刻h[i].pop();//判断是否有同一时刻多次订单if (last != x) {//计算时间差,减少优先级pri -= (x - last - 1);//优先级不能为负if (pri < 0)pri = 0;}//判定是否移除优先级if (in && pri <= 3)in = false;//增加优先级pri += 2;last = x;//判定是否加入缓存if (pri > 5) {in = true;}}//判断T时刻该店铺是否在优先缓存中if (last != t) {pri -= (t - last);if (pri < 0)pri = 0;}if (in && pri <= 3)in = false;if (in) {cnt++;}}cout << cnt;return 0;
}

相关文章:

P8685 [蓝桥杯 2019 省 A] 外卖店优先级--优先队列“数组”!!!!!

P8685 [蓝桥杯 2019 省 A] 外卖店优先级 题目 解析优先队列如何判断是否使用优先队列&#xff1f;省略规则优先队列常用操作大顶堆 vs 小顶堆定义队列h队列数组 代码 题目 解析 每个外卖店会在不同的时间点收到订单&#xff0c;我们可以看见测试用例的时间顺序是不同的&#x…...

VsCode + EIDE + OpenOCD + STM32(野火DAP) 开发环境配置

VsCode EIDE OpenOCD STM32(野火DAP) 开发环境配置 接受了新时代编辑器的我&#xff0c;实在受不了Keil的上古编辑页面&#xff0c;周树人说过&#xff1a;由奢入俭难&#xff0c;下面我们一起折腾一下开源软件Vscode&#xff0c; 用以开发51和STM32&#xff0c;有错误之处&…...

JVM类加载器面试题及原理

JVM只会运行二进制文件&#xff0c;类加载器的作用就是将字节码文件加载到JVM中&#xff0c;从而让Java程序能够启动起来。 1. 类加载器的种类 启动类加载器&#xff08;BootStrap ClassLoader&#xff09;&#xff1a;加载JAVA_HOME/jre/lib目录下的库扩展类加载器&#xff…...

在 Maven 中使用 <scope> 元素:全面指南

目录 前言 在 Maven 中&#xff0c; 元素用于定义依赖项的作用范围&#xff0c;即依赖项在项目生命周期中的使用方式。正确使用 可以帮助我们优化项目的构建过程&#xff0c;减少不必要的依赖冲突&#xff0c;并提高构建效率。本文将详细介绍 的使用步骤、常见作用范围、代码…...

tomcat的安装与配置(包含在idea中配置tomcat)

Tomcat 是由 Apache 软件基金会开发的开源 Java Web 应用服务器&#xff0c;主要用于运行 Servlet 和 JSP&#xff08;JavaServer Pages&#xff09;程序。它属于轻量级应用服务器&#xff0c;适用于中小型系统及开发调试场景&#xff0c;尤其在处理动态内容&#xff08;如 Jav…...

问题解决:AttributeError: ‘NoneType‘ object has no attribute ‘text‘

项目环境&#xff1a; 我的环境&#xff1a;Window10&#xff0c;Python3.12&#xff0c;Anaconda3&#xff0c;Pycharm2024.3.4 问题描述&#xff1a; 找不到’text’这个对象 部分代码&#xff1a; Traceback (most recent call last):File "D:\IT DateFiles\PyDate\FQ…...

量子计算测试挑战:软件测试将如何迎接新纪元?

引言 在计算机技术的飞速发展中&#xff0c;量子计算(Quantum Computing)正成为下一个颠覆性的科技热点。随着谷歌、IBM、微软等科技巨头纷纷投入巨资研究量子计算&#xff0c;其应用场景正逐步扩展&#xff0c;从优化计算到密码安全&#xff0c;再到人工智能和材料科学。然而…...

读书报告」网络安全防御实战--蓝军武器库

一眨眼&#xff0c;20天过去了&#xff0c;刷完了这本书「网络安全防御实战--蓝军武器库」&#xff0c;回味无穷&#xff0c;整理概览如下&#xff0c;可共同交流读书心得。在阅读本书的过程中&#xff0c;我深刻感受到网络安全防御是一个综合性、复杂性极高的领域。蓝军需要掌…...

《机器学习数学基础》补充资料:过渡矩阵和坐标变换推导

尽管《机器学习数学基础》这本书&#xff0c;耗费了比较长的时间和精力&#xff0c;怎奈学识有限&#xff0c;错误难免。因此&#xff0c;除了在专门的网页&#xff08; 勘误和修订 &#xff09;中发布勘误和修订内容之外&#xff0c;对于重大错误&#xff0c;我还会以专题的形…...

深度学习与普通神经网络有何区别?

深度学习与普通神经网络的主要区别体现在以下几个方面&#xff1a; 一、结构复杂度 普通神经网络&#xff1a;通常指浅层结构&#xff0c;层数较少&#xff0c;一般为2-3层&#xff0c;包括输入层、一个或多个隐藏层、输出层。深度学习&#xff1a;强调通过5层以上的深度架构…...

Flutter底层实现

1. Dart 语言 Dart 是 Flutter 的主要编程语言。Dart 设计之初就是为了与 JavaScript 兼容&#xff0c;并且可以编译为机器代码运行。Dart 提供了一些特性&#xff0c;如异步支持&#xff08;通过 async 和 await&#xff09;&#xff0c;这使得编写高效的网络请求和复杂动画变…...

【芯片验证】verificationguide上的36道UVM面试题

跟上一篇一样,verificationguide上的36到UVM面试题,通义回答ds判卷。 1. What is uvm_transaction, uvm_seq_item, uvm_object, uvm_component? uvm_transaction、uvm_seq_item、uvm_object、uvm_component是什么? uvm_transaction是UVM中所有事务的基础类,用于表示仿真…...

AI日报 - 2025年3月10日

AI日报 - 2025年3月10日 &#x1f31f; 今日概览&#xff08;60秒速览&#xff09; ▎&#x1f916; AGI突破 | Anthropic CEO预测强AI最早2026年到来 &#x1f52c; SAGE框架提升问答质量61.25%&#xff0c;Reflexion框架将GPT-4成功率提至91% ▎&#x1f4bc; 商业动向 | xA…...

基于深度文档理解的开源 RAG 引擎RAGFlow的介绍和安装

目录 前言1. RAGFlow 简介1.1 什么是 RAGFlow&#xff1f;1.2 RAGFlow 的核心特点 2. RAGFlow 的安装与配置2.1 硬件与软件要求2.2 下载 RAGFlow 源码2.3 源码编译 Docker 镜像2.4 设置完整版&#xff08;包含 embedding 模型&#xff09;2.5 运行 RAGFlow 3. RAGFlow 的应用场…...

TinyWebServer项目笔记——02 半同步半反应堆线程池

目录 1.基础知识 &#xff08;1&#xff09;服务器编程基本框架 &#xff08;2&#xff09;五种I/O模型 &#xff08;3&#xff09;事件处理模式 &#xff08;4&#xff09;并发编程模式 &#xff08;5&#xff09;半同步/半反应堆 &#xff08;6&#xff09;线程池 &a…...

【技术干货】三大常见网络攻击类型详解:DDoS/XSS/中间人攻击,原理、危害及防御方案

1. DDoS攻击 1.1 什么是DDoS攻击&#xff1f; DDoS&#xff08;Distributed Denial of Service&#xff0c;分布式拒绝服务攻击&#xff09;通过操控大量“僵尸设备”&#xff08;Botnet&#xff09;向目标服务器发送海量请求&#xff0c;耗尽服务器资源&#xff08;带宽、CPU…...

用Deepseek写一个五子棋微信小程序

在当今快节奏的生活中&#xff0c;休闲小游戏成为了许多人放松心情的好选择。五子棋作为一款经典的策略游戏&#xff0c;不仅规则简单&#xff0c;还能锻炼思维。最近&#xff0c;我借助 DeepSeek 的帮助&#xff0c;开发了一款五子棋微信小程序。在这篇文章中&#xff0c;我将…...

MWC 2025 | 紫光展锐与中国联通联合发布5G eSIM 平板

2025 年 3 月 3 日至 6 日&#xff0c;在全球移动通信行业的年度盛会 —— 世界移动通信大会&#xff08;MWC 2025&#xff09;上&#xff0c;紫光展锐联合中国联通重磅发布了支持eSIM的5G平板VN300E。 该产品采用紫光展锐T9100高性能5G SoC芯片平台&#xff0c;内置8 TOPS算力…...

跟着 Lua 5.1 官方参考文档学习 Lua (12)

文章目录 5.7 – Input and Output Facilities补充内容io.input ([file])io.read ()io.write ()io.output ([file])io.lines ([filename])io.flush ()io.close ([file])io.open (filename [, mode])io.popen (prog [, mode])io.tmpfile ()io.type (ob)file:read ()file:lines (…...

操作系统控制台-健康守护我们的系统

引言基本准备体验功能健康守护系统诊断 收获提升结语 引言 阿里云操作系统控制平台作为新一代云端服务器中枢平台&#xff0c;通过创新交互模式重构主机管理体验。操作系统控制台提供了一系列管理功能&#xff0c;包括运维监控、智能助手、扩展插件管理以及订阅服务等。用户可以…...

FreeRTOS任务状态查询

一.任务相关API vTaskList&#xff08;&#xff09;&#xff0c;创建一个表格描述每个任务的详细信息 char biaoge[1000]; //定义一个缓存 vTaskList(biaoge); //将表格存到这缓存中 printf("%s /r/n",biaoge); 1.uxTaskPriorityGet&#xff08;&#xf…...

blender学习25.3.6

【02-基础篇】Blender小凳子之凳面及凳脚的创作_哔哩哔哩_bilibili 【03-基础篇】Blender小凳子之其他细节调整优化_哔哩哔哩_bilibili 这篇文章写的全&#xff0c;不用自己写了 Blender 学习笔记&#xff08;一&#xff09;快捷键记录_blender4.1快捷键-CSDN博客 shifta&a…...

Tensorflow 2.0 GPU的使用与限制使用率及虚拟多GPU

Tensorflow 2.0 GPU的使用与限制使用率及虚拟多GPU 1. 获得当前主机上特定运算设备的列表2. 设置当前程序可见的设备范围3. 显存的使用4. 单GPU模拟多GPU环境 先插入一行简单代码&#xff0c;以下复制即可用来设置GPU使用率&#xff1a; import tensorflow as tf import numpy…...

RabbitMQ 2025/3/5

高性能异步通信组件。 同步调用 以支付为例&#xff1a; 可见容易发生雪崩。 异步调用 以支付为例&#xff1a; 支付服务当甩手掌柜了&#xff0c;不管后面的几个服务的结果。只管库库发&#xff0c;后面那几个服务想取的时候就取&#xff0c;因为消息代理里可以一直装&#x…...

每日一题-----面试

一、什么是孤儿进程&#xff1f;什么是僵尸进程&#xff1f; 1.孤儿进程是指父进程在子进程结束之前就已经退出&#xff0c;导致子进程失去了父进程的管理和控制&#xff0c;成为了 “孤儿”。此时&#xff0c;这些子进程会被系统的 init 进程&#xff08;在 Linux 系统中&…...

JSP+Servlet实现对数据库增删改查功能

前提概要 需要理解的重要概念 ​MVC模式&#xff1a; Model&#xff08;person类&#xff09;&#xff1a;数据模型View&#xff08;JSP&#xff09;&#xff1a;显示界面Controller&#xff08;Servlet&#xff09;&#xff1a;处理业务逻辑 ​请求流程&#xff1a; 浏览器 …...

C++【类和对象】

类和对象 1.this 指针2.类的默认成员函数3.构造函数4.析构函数5.拷贝构造函数 1.this 指针 接上文 this指针存在内存的栈区域。 2.类的默认成员函数 定义&#xff1a;编译器自动生成的成员函数。一个类&#xff0c;我们不写的情况下会默认生成六个成员函数。 3.构造函数 函…...

GStreamer —— 2.13、Windows下Qt加载GStreamer库后运行 - “教程13:播放控制“(附:完整源码)

运行效果(音频) 简介 上一个教程演示了GStreamer工具。本教程介绍视频播放控制。快进、反向播放和慢动作都是技术 统称为 Trick Modes&#xff0c;它们都有一个共同点 修改 Normal playback rate。本教程介绍如何实现 这些效果并在交易中添加了帧步进。特别是&#xff0c;它 显…...

MongoDB winx64 msi包安装详细教程

首先我们可以从官网上选择对应版本和对应的包类型进行安装&#xff1a; 下载地址&#xff1a;Download MongoDB Community Server | MongoDB 这里可以根据自己的需求&#xff0c; 这里我选择的是8.0.5 msi的版本&#xff0c;采用的传统装软件的方式安装。无需配置命令。 下载…...

要查看 SQLite 数据库中的所有表,可以通过查询 SQLite 的系统表 sqlite_master

要查看 SQLite 数据库中的所有表&#xff0c;可以查询 SQLite 的系统表 sqlite_master。 每个 SQLite 数据库都包含一个名为 sqlite_master 的系统表。该表定义了数据库的模式&#xff0c;存储了数据库中所有表、索引、视图和触发器等对象的信息。 通过查询 sqlite_master&am…...