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

【洛谷】队列相关经典算法题详解:模板队列、机器翻译、海港

文章目录

  • 【模板】队列
    • 题目描述
    • 题目解析
    • 代码
  • 机器翻译
    • 题目描述
    • 题目解析
    • 代码
  • 海港
    • 题目描述
    • 题目解析
    • 代码


【模板】队列

题目描述

在这里插入图片描述

题目解析

本题非常简单,小编这里用数组模拟队列实现,需要两个下标分别标记队头和队尾。

代码

using namespace std;
#include <iostream>const int N = 1e6 + 10;
int qe[N];
int head = 0; //标记队头下标
int tail = 0; //标记队尾下标int main()
{int n;cin >> n;int a, b;while (n--){cin >> a;if (a == 1){//队尾插入cin >> b;qe[tail++] = b;}else if (a == 2){if (head == tail){//队列为空cout << "ERR_CANNOT_POP" << endl;}else{++head;}}else if (a == 3){if (head == tail){//队列为空cout << "ERR_CANNOT_QUERY" << endl;}else{cout << qe[head] << endl;}}else{cout << tail - head << endl;}}return 0;
}

机器翻译

题目描述

在这里插入图片描述

题目解析

本题重在理解题意,内存的处理数据逻辑是先进先出,所以可以用一个队列来模拟内存。因为stl的队列不支持下标随机访问,所以需要开辟一个st数组用来映射标记队列中存放的数字。变量count记录查找词典次数,也就是数据入队列次数,遍历所有数字,若遇到的数字在队列中存在,则不做任何操作继续遍历,若遇到的数字在队列中不存在,则需要把数字入队列,并把当前数字对应st数组的下标置为true,若此时队列已经满了,还需要把队列pop一下,并把pop掉元素的数值对应st数组的下标置为false。最后输出count结果。

代码

using namespace std;
#include <iostream>
#include <queue>const int M = 1010;
//一个下标映射数组,标记某个值是否在队列中
bool st[M]; int main()
{int m, n;cin >> m >> n;queue<int> q;int x = 0; //暂存插入数据int count = 0; //标记插入队列次数while (n--){cin >> x;//队列中没有x则插入xif (st[x] == false){++count;//队列空间不足,pop一个数据后再插入数据if (q.size() >= m){//pop同时把映射数组对应位置置为falsest[q.front()] = false; q.pop();}//队列空间足够,直接插入数据q.push(x);st[x] = true;}}cout << count;return 0;
}

海港

题目描述

在这里插入图片描述

题目解析

本题有一定难度,厘清思路还是很简单的。首先题目的信息很多,时间,船,人,国籍,我们最后要输出的是一定时间范围内有多少种国籍,而国家默认和人绑定,所以船只是一个载体,最主要要统计时间和人的信息,所以我们可以用一个pair手动将人和时间绑定。
根据题目描述一个国家有多少人是不确定的,所以可以用一个数组ctarr来统计某个国家的人数,数组下标代表国家,数组元素代表国家人数。
本题题意是以新来一艘船的时间为基准,统计离该时间最近的24小时内的国籍信息,也就是若船是在该时间24小时之前或者更早来的就不在统计范围内,要把这些数据去掉,并且时间是一直递增的,所以符合队列的先进先出原则,可以用队列来存储人和时间绑定的pair信息。
准备工作做完了,开始按船为单位读入数据,还需要用一个kind维护国籍信息。来一个人,就把它的时间和国籍打包存进queue,并把ctarr对应国籍加一,如果对应国籍元素是0,说明该人是当前时间范围内第一个该国籍的人,需要把kind加一。
读完一艘船的信息后,我们需要让队列合法,也就是清除在时间范围外的数据。遍历每一个在时间范围外的人,把该人ctarr对应国籍减一,如果对应国籍元素是1,需要把kind减一。最后输出kind信息。

代码

using namespace std;
#include <iostream>
#include <queue>typedef pair<int, int> PII;const int N = 1e5 + 10;
//int st[N];
int ctarr[N];   //ctarr[i]表示i国家一共有多少人
int kind = 0;   //国家种类个数int main()
{//queue存储每个人的信息,将人的信息和时间绑定//pair<人到港时间, 人国籍>queue<PII> q;//n艘船,船到达时间为t,船上有m个人,该人的国籍为kint n, t, m, k; cin >> n;for (int i = 0; i < n; i++){cin >> t >> m;//遍历整艘船乘客for (int j = 0; j < m; j++){cin >> k;q.push({ t, k }); //将人的信息插入队列//ctarr某个下标从0到1,国家种类个数加1if (ctarr[k] == 0)++kind;++ctarr[k]; //对应国籍人数加1}//让队列合法(队尾入,队头出,队尾-队头)while (q.back().first - q.front().first >= 86400){pair<int, int> tmp = q.front();q.pop();//ctarr某个下标从1到0,国家种类个数减1if (ctarr[tmp.second] == 1)--kind;--ctarr[tmp.second];}cout << kind << endl;}return 0;
}

以上就是小编分享的全部内容了,如果觉得不错还请留下免费的关注和收藏
如果有建议欢迎通过评论区或私信留言,感谢您的大力支持。
一键三连好运连连哦~~

在这里插入图片描述


文章转载自:

http://SD6wNp6o.zpxwg.cn
http://kFnIAXfy.zpxwg.cn
http://RMurBGzw.zpxwg.cn
http://CVJKETk4.zpxwg.cn
http://Tp6ngyWe.zpxwg.cn
http://OTwtIEq8.zpxwg.cn
http://9NQlOKSN.zpxwg.cn
http://jP5OUzgP.zpxwg.cn
http://lnbRp7cE.zpxwg.cn
http://agT5sA1J.zpxwg.cn
http://USm0rH7m.zpxwg.cn
http://ejPIIY2k.zpxwg.cn
http://BOJ1znuT.zpxwg.cn
http://6EwiWZX6.zpxwg.cn
http://6yu02Nr1.zpxwg.cn
http://M7sQZWBl.zpxwg.cn
http://ai48WOvs.zpxwg.cn
http://PZMil9Lj.zpxwg.cn
http://ITArGyS8.zpxwg.cn
http://gDiIHOoa.zpxwg.cn
http://mOSf59Ra.zpxwg.cn
http://WFJrVKW4.zpxwg.cn
http://Ba2YSQ8g.zpxwg.cn
http://Y91J6PHb.zpxwg.cn
http://fRkpyh3G.zpxwg.cn
http://PoWnNkJv.zpxwg.cn
http://T9Yjbp21.zpxwg.cn
http://ULFAIKy5.zpxwg.cn
http://vn4KFdMj.zpxwg.cn
http://JIjOh0II.zpxwg.cn
http://www.dtcms.com/a/369825.html

相关文章:

  • 激光频率梳 3D 轮廓测量 - 油路板的凹槽深度和平面度测量
  • 24.线程概念和控制(一)
  • Altium Designer(AD24)切换工作界面为浅灰色的方法
  • 让字符串变成回文串的最少插入次数-二维dp
  • 零基础入门深度学习:从理论到实战,GitHub+开源资源全指南(2025最新版)
  • 从文本到知识:使用LLM图转换器构建知识图谱的详细指南
  • 【开题答辩全过程】以 停车场管理系统的设计与实现为例,包含答辩的问题和答案
  • 带fat32文件系统的bin二进制文件制作教程
  • 【Redis】缓存的穿透、击穿和雪崩
  • C++经典的数据结构与算法之经典算法思想:分治法(Divide and Conquer)
  • PDF教程|如何把想要的网页保存下来?
  • DevOps实战(2) - 使用Arbess+GitPuk+Docker实现Java项目自动化部署
  • Git reset 回退版本
  • PostgreSQL与Greenplum数据库的编程语言连接
  • git在Linux中的使用
  • 全面剖析TENGJUN防水TYPE-C板上双排贴(L7.55/舌片外露1.1/双耳带螺孔):认证、防水与结构设计的三重突破
  • fastapi通过sqlmodel连接Mysql实现crud功能
  • 百度竞价推广:搜索竞价信息流推广代运营
  • Go基础(④指针)
  • 【开题答辩全过程】以 基于JSP的高校健康体育活动管理系统的设计与实现为例,包含答辩的问题和答案
  • 贪心算法应用:基因编辑靶点选择问题详解
  • webrtc弱网-LossBasedBandwidthEstimation类源码分析与算法原理
  • 01-线上问题处理-树形结构拼接
  • uniapp | 解决组件样式不生效问题
  • 尚硅谷宋红康JVM全套教程(详解java虚拟机)
  • uniapp基础组件概述
  • C++和OpenGL实现3D游戏编程【连载30】——文字的多行显示
  • 使用UniApp实现下拉框和表格组件页面
  • 人工智能学习:基于seq2seq模型架构实现翻译
  • Day12--HOT100--23. 合并 K 个升序链表,146. LRU 缓存,94. 二叉树的中序遍历