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

C++的双端队列

双端队列介绍

  • 1.双端队列知识需知
  • 2.大试牛刀

1.双端队列知识需知

由于队列是一种先进先出(FIFO)的数据结构,因此无法直接从队列的底部删除元素。如果希望从队列的底部删除元素,可以考虑使用双端队列(deque)。

双端队列(deque)是一种允许在两端插入和删除元素的数据结构。可以使用 push_back() 和 push_front() 方法在双端队列的两端插入元素,使用 pop_back() 和 pop_front() 方法在双端队列的两端删除元素。

下面是一个示例,演示如何使用双端队列从底部删除元素:

#include
#include
using namespace std;

int main() {deque<int> d;d.push_back(1);d.push_back(2);d.push_back(3);cout << d.back() << endl; // 输出 3d.pop_back(); // 删除底部元素cout << d.back() << endl; // 输出 2
}

2.大试牛刀

一种自动包装机的结构如图 1 所示。首先机器中有 N 条轨道,放置了一些物品。轨道下面有一个筐。当某条轨道的按钮被按下时,活塞向左推动,将轨道尽头的一件物品推落筐中。当 0 号按钮被按下时,机械手将抓取筐顶部的一件物品,放到流水线上。图 2 显示了顺序按下按钮 3、2、3、0、1、2、0 后包装机的状态。
在这里插入图片描述
图1 自动包装机的结构
在这里插入图片描述
图 2 顺序按下按钮 3、2、3、0、1、2、0 后包装机的状态

一种特殊情况是,因为筐的容量是有限的,当筐已经满了,但仍然有某条轨道的按钮被按下时,系统应强制启动 0 号键,先从筐里抓出一件物品,再将对应轨道的物品推落。此外,如果轨道已经空了,再按对应的按钮不会发生任何事;同样的,如果筐是空的,按 0 号按钮也不会发生任何事。

现给定一系列按钮操作,请你依次列出流水线上的物品。

输入格式:
输入第一行给出 3 个正整数 N(≤100)、M(≤1000)和 Smax (≤100),分别为轨道的条数(于是轨道从 1 到 N 编号)、每条轨道初始放置的物品数量、以及筐的最大容量。随后 N 行,每行给出 M 个英文大写字母,表示每条轨道的初始物品摆放。

最后一行给出一系列数字,顺序对应被按下的按钮编号,直到 −1 标志输入结束,这个数字不要处理。数字间以空格分隔。题目保证至少会取出一件物品放在流水线上。

输出格式:
在一行中顺序输出流水线上的物品,不得有任何空格。

输入样例:

3 4 4
GPLT
PATA
OMSA
3 2 3 0 1 2 0 2 2 0 -1

输出样例:

MATA

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

总体思路是用二维数组g[110][1010]来获取每个轨道上的物品,然后存入一个双端队列q中,用q[0]来模拟筐,用q[1]-q[n]来模拟每一条轨道.

#include <iostream>
#include <deque>
using namespace std;
const int N = 110;
int n,m,smax;
char g[110][1010];
deque<char> q[N];
int main()
{cin>>n>>m>>smax;for(int i=1;i<=n;i++)    //1到n条轨道{for(int j=1;j<=m;j++)   //每条轨道上初始有n个物品{cin>>g[i][j];     //输入第i个轨道的第j个物品q[i].push_back(g[i][j]);  //放入队列q中}}int t;while(cin>>t,t!=-1) // 读入按钮编号,直到读入 -1 结束{if(t==0) // 如果按下的是 0 号按钮{if(q[0].size()) cout<<q[0].back(),q[0].pop_back(); // 如果筐不为空,则取出筐顶部物品,放到流水线上}else // 如果按下的不是 0 号按钮{if(q[t].size()) // 如果对应轨道不为空{if(q[0].size()==smax) cout<<q[0].back(),q[0].pop_back(); // 如果筐已满,则先取出筐顶部物品,放到流水线上q[0].push_back(q[t].front()); // 将对应轨道尽头物品推落筐中q[t].pop_front();  //记得要删除t轨道上推出的那个物品}}}
}

相关文章:

C++的双端队列

双端队列介绍1.双端队列知识需知2.大试牛刀1.双端队列知识需知 由于队列是一种先进先出&#xff08;FIFO&#xff09;的数据结构&#xff0c;因此无法直接从队列的底部删除元素。如果希望从队列的底部删除元素&#xff0c;可以考虑使用双端队列&#xff08;deque&#xff09;。…...

【独家】华为OD机试 - 拼接 URL(C 语言解题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

为什么使用Junit单元测试?Junit的详解

Hi I’m Shendi 为什么使用Junit单元测试&#xff1f;Junit的详解 Junit简介 Junit是一个Java语言的单元测试框架。 单元测试是一个对单一实体&#xff08;类或方法&#xff09;的测试 JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架&#xff08;regression test…...

怎么学好嵌入式Linux系统和驱动

嵌入式专业是一门实践性非常强的学科&#xff0c;只有多动手&#xff0c;多实践&#xff0c;多编程&#xff0c;多调试&#xff0c;多看书&#xff0c;多思考才能真正掌握好嵌入式开发技术。 现在很多同学也意识到了学校培养模式和社会需求脱节问题&#xff0c;有一部分同学也先…...

Spring Aware总结

概述 Spring中Aware到底是什么意思&#xff1f; 我们在看Spring源码的时候&#xff0c;经常可以看到xxxAwarexxx的身影&#xff0c;通常我会很疑惑&#xff0c;Aware到底是什么意思呢&#xff1f; 比如图片中这些包含Aware关键字的类或者接口。 我对下面3个类或接口进行了解…...

【RocketMQ】源码详解:Broker端消息刷盘流程

消息刷盘 同步入口&#xff1a;org.apache.rocketmq.store.CommitLog.GroupCommitService 异步入口&#xff1a;org.apache.rocketmq.store.CommitLog.FlushRealTimeService 刷盘有同步和异步两种&#xff0c;在实例化Commitlog的时候&#xff0c;会根据配置创建不同的服务 p…...

编码器SIQ-02FVS3驱动

一.简介 此编码器可以是功能非常强大&#xff0c;可以检测左右转动&#xff0c;和按键按下&#xff0c;所以说这一个编码器可以抵三个按键&#xff0c;而且体积非常小&#xff0c;使用起来比三个按键要高大尚&#xff0c;而且驱动也简单。唯一不足的点就是价格有点小贵6-8元才…...

【2021.9.7】记一次exe手动添加shellcode

【2021.9.7】记一次exe手动添加shellcode 文章目录【2021.9.7】记一次exe手动添加shellcode0.大致思路1.获取MessageBox的真实地址VA2.通过OD在代码段添加shellcode3.dump出数据,设置程序OEP4.测试dump出来的exe5.方法总结测试的exe和添加了shellcode的exe&#xff1a;链接&…...

常用训练tricks,提升你模型的鲁棒性

目录一、对抗训练FGM(Fast Gradient Method): ICLR2017代码实现二、权值平均1.指数移动平均&#xff08;Exponential Moving Average&#xff0c;EMA&#xff09;为什么EMA会有效&#xff1f;代码实现2. 随机权值平均&#xff08;Stochastic Weight Averaging&#xff0c;SWA&a…...

具有精密内部基准的 DACx0502 简介及驱动应用示例

DACx0502 说明 16 位 DAC80502、14 位 DAC70502 和 12 位DAC60502 (DACx0502) 数模转换器 (DAC) 均为具有电压输出的高精度、低功耗器件。 DACx0502 线性度小于 1LSB。凭借高精度和微型封装特性&#xff0c;DACx0502 非常适合以下 应用&#xff1a; 增益和失调电压校准、电流…...

C语言函数:字符串函数及模拟实现strncpy()、strncat()、strncmp()

C语言函数&#xff1a;字符串函数及模拟实现strncpy()、strncat()、strncmp() 在了解strncpy、strncat()、前&#xff0c;需要先了解strcpy()、strncat()&#xff1a; C语言函数&#xff1a;字符串函数及模拟实现strlen() 、strcpy()、 strcat()_srhqwe的博客-CSDN博客 strncp…...

学术论文插图要求简介

1. 类型 位图和矢量图是两种不同的图像类型&#xff0c;它们在存储和处理图像时使用不同的方法。以下是它们之间的详细区别&#xff1a; 图像构成方式&#xff1a;位图使用像素&#xff08;或图像的最小单元&#xff09;来构建图像&#xff0c;每个像素都有自己的颜色和亮度值。…...

【独家】华为OD机试 - 斗地主 2(C 语言解题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

力扣-计算特殊奖金

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1873. 计算特殊奖金二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总…...

华为校招机试真题目录

专栏介绍 本专栏将逐步收集历年华为校招算法真题 专栏权益 每篇博客都包含: 算法考点解析(文字+画图)算法源码(支持 Java / JS / Python)每晚9:00 ~ 11:00 在线答疑 真题目录 时间题目考点 or 实现2022.11.27...

EdgeYOLO学习笔记

EdgeYOLO学习笔记 EdgeYOLO: An Edge-Real-Time Object Detector Abstract 本文基于最先进的YOLO框架&#xff0c;提出了一种高效、低复杂度、无锚的目标检测器&#xff0c;该检测器可以在边缘计算平台上实时实现。为了有效抑制训练过程中的过拟合&#xff0c;我们开发了一种…...

【分布式】什么是分布式锁?正文揭晓

分布式锁的概念 分布式锁其实可以理解为&#xff1a;控制分布式系统有序的去对共享资源进行操作&#xff0c;通过互斥来保持一致性。 举个例子&#xff1a;假设共享的资源就是一个房子&#xff0c;里面有各种书&#xff0c;分布式系统就是要进屋看书的人&#xff0c; 分布式锁…...

超详细JDK1.8所有版本下载地址

JDK1.8即为JDK8&#xff0c;JDK8是目前是最成熟最稳定的版本&#xff0c;本文将详细介绍JDK1.8历史版本的下载方式。 在此附上JDK1.8安装与配置教程 超详细JDK1.8安装与配置 一、JDK官网 首先打开oracle官网&#xff0c;官网首页地址为 JDK官网首页地址 点击Products 点击…...

论文解析[11] CAT: Cross Attention in Vision Transformer

发表时间&#xff1a;2021 论文地址&#xff1a;https://arxiv.org/abs/2106.05786v1 文章目录摘要3 方法3.1 总体结构3.1.1 Inner-Patch Self-Attention Block3.1.2 Cross-Patch Self-Attention Block3.1.3 Cross Attention based Transformer结论摘要 使用图像patch来替换tr…...

嵌入式和Python(一):python环境搭建的详细步骤

目录 ● 安装python ① 更新软件列表 ② 安装编译python需要用到的环境 ③ 下载python源码 ④ 解压源码包 ⑤ 配置 ⑥ 编译 ⑦ 安装 ● 建立软连接 说明 ① 删除原来的软连接 ② 在/usr/bin/目录创建软连接python&#xff0c;定向/usr/local/bin/python3.9 ③ 检查…...

烟台GEO搜索优化服务商链接烟台GEO搜索优化服务商

在当今数字化时代&#xff0c;越来越多的商家开始重视线上推广&#xff0c;希望通过互联网吸引更多潜在客户。然而&#xff0c;在实际操作中&#xff0c;很多商家面临着传统广告投放广撒网、预算浪费在非目标人群等问题。如何解决这些痛点&#xff0c;实现高效精准的营销呢&…...

VSCode 中使用 MATLAB 安装流程

文章目录 运行程序 修改 Code-Runner 文件 使用 Copilot 如何开启 MATLAB 调试功能 Matlab: Linter Config(代码检查器配置):保持空白就好。 Linter(在这里指的是 MATLAB 的 mlint)是一个静态代码分析工具。它会在你写代码时,自动用波浪线提示语法错误或者给出优化建议(…...

React Native Interactable跨平台开发终极指南:iOS与Android差异处理技巧

React Native Interactable跨平台开发终极指南&#xff1a;iOS与Android差异处理技巧 【免费下载链接】react-native-interactable Experimental implementation of high performance interactable views in React Native 项目地址: https://gitcode.com/gh_mirrors/re/react…...

YOLOv11桌面应用实战:PyQt5打造智能监控与目标追踪系统

1. YOLOv11与PyQt5的强强联合 在计算机视觉领域&#xff0c;YOLO系列模型一直以其实时性和准确性著称。最新发布的YOLOv11在保持原有优势的基础上&#xff0c;进一步优化了模型结构和训练策略&#xff0c;使其在小目标检测和复杂场景下的表现更加出色。而PyQt5作为Python生态中…...

BIOS更新全攻略:从版本检查到安全升级的实用指南

1. BIOS更新前的必要准备 每次打开电脑时&#xff0c;那个一闪而过的黑底白字界面就是BIOS&#xff08;基本输入输出系统&#xff09;&#xff0c;它就像是电脑硬件的"总指挥"。我见过太多人因为盲目刷BIOS导致主板报废的案例&#xff0c;所以更新前一定要做好这些准…...

光谱特征选择实战:UVE算法原理、实现与避坑指南

1. UVE算法原理&#xff1a;噪声如何帮你筛选特征&#xff1f; 第一次听说用噪声来筛选特征时&#xff0c;我也觉得不可思议——噪声不是应该干扰数据分析吗&#xff1f;但UVE算法的精妙之处恰恰在于它把噪声变成了"标尺"。想象你在超市挑选苹果&#xff0c;如果闭着…...

避坑指南:在OpenHarmony ESP32上驱动INMP441麦克风时,I2S库编译报错的排查与解决

深度解析&#xff1a;OpenHarmony ESP32驱动INMP441麦克风的I2S编译问题全攻略 当你在OpenHarmony环境下为ESP32开发板移植INMP441数字麦克风驱动时&#xff0c;是否遇到过I2S库编译报错的困扰&#xff1f;这个问题看似简单&#xff0c;实则涉及编译系统、依赖管理和硬件抽象层…...

Wireshark网络协议分析与故障排查实战指南

1. Wireshark网络分析入门指南作为一名网络工程师&#xff0c;我使用Wireshark进行网络故障排查已有8年时间。这款开源网络协议分析器确实改变了我的工作方式&#xff0c;让我能够直观地"看到"网络流量。记得第一次使用Wireshark分析一个棘手的TCP连接问题时&#xf…...

第1节:如何统一多源文档格式?

RAG与Agent性能调优&#xff1a;1.如何统一多元文档格式&#xff1f; Gitee地址&#xff1a;https://gitee.com/agiforgagaplus/OptiRAGAgent 文章详情目录&#xff1a;RAG与Agent性能调优 下一节&#xff1a;待更新 导论 从路口着手解决问题 在RAG技术中&#xff0c;文档…...

从实战到复盘:K8s服务器电子数据取证竞赛全解析与核心技巧

1. K8s服务器电子数据取证竞赛全景解析 第一次参加K8s服务器电子数据取证竞赛时&#xff0c;我完全被复杂的集群环境搞懵了。三个节点、七个命名空间、近20个Pod&#xff0c;还有各种加密算法和数据库连接&#xff0c;简直像走进了一个技术迷宫。但经过几轮实战后&#xff0c;我…...