news 2026/5/23 3:28:01

洛谷 P1160:队列安排 ← 数组模拟

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
洛谷 P1160:队列安排 ← 数组模拟

【题目来源】
https://www.luogu.com.cn/problem/P1160

【题目描述】
一个学校里老师要将班上 N 个同学排成一列,同学被编号为 1∼N,他采取如下的方法:
(1)先将 1 号同学安排进队列,这时队列中只有他一个人;
(2)2∼N 号同学依次入列,编号为 i 的同学入列方式为:老师指定编号为 i 的同学站在编号为 1∼(i−1) 中某位同学(即之前已经入列的同学)的左边或右边;
(3)从队列中去掉 M 个同学,其他同学位置顺序不变。
在所有同学按照上述方法队列排列完毕后,老师想知道从左到右所有同学的编号。

【输入格式】
第一行一个整数 N,表示了有 N 个同学。
第 2∼N 行,第 i 行包含两个整数 k,p,其中 k 为小于 i 的正整数,p 为 0 或者 1。若 p 为 0,则表示将 i 号同学插入到 k 号同学的左边,p 为 1 则表示插入到右边。
第 N+1 行为一个整数 M,表示去掉的同学数目。
接下来 M 行,每行一个正整数 x,表示将 x 号同学从队列中移去,如果 x 号同学已经不在队列中则忽略这一条指令。

【输出格式】
一行,包含最多 N 个空格隔开的整数,表示了队列从左到右所有同学的编号。

【输入样例】
4
1 0
2 1
1 0
2
3
3

【输出样例】
2 4 1

【数据范围】
对于 20% 的数据,1≤N≤10。
对于 40% 的数据,1≤N≤1000。
对于 100% 的数据,1<M≤N≤10^5。

【算法分析】
● 本题利用
数组模拟实现双链表的代码思想,与“AcWing 827:双链表”的思想基本一致。详见:https://blog.csdn.net/hnjzsyjyj/article/details/150845789

● 本题利用数组模拟实现双链表的示意图,附设了 idx=0 及 idx=1 两个结点。之后,插入结点 2(idx=2)的示意图如下所示。

● 特别要注意,本题在删除某个结点时,要进行特判,看看待删结点是否还存在。若不存在,忽略此删除操作。

● 本题用
STL list实现的代码,详见:https://blog.csdn.net/hnjzsyjyj/article/details/151970421

【算法代码】

#include <bits/stdc++.h> using namespace std; const int maxn=1e5+5; int le[maxn],ri[maxn],v[maxn],idx; bool st[maxn]; int n,m,k,q,x; void init() { ri[0]=1,le[1]=0; idx=2; } void insert(int p,int x) { v[idx]=x; le[idx]=p,ri[idx]=ri[p]; le[ri[p]]=idx,ri[p]=idx++; } void remove(int k) { ri[le[k]]=ri[k]; le[ri[k]]=le[k]; } int main() { init(); insert(0,1); cin>>n; for(int i=2; i<=n; i++) { cin>>k>>q; if(q) insert(k+1,i); else insert(le[k+1],i); } cin>>m; while(m--) { cin>>x; if(!st[x]) { remove(x+1); st[x]=true; } } for(int i=ri[0]; i!=1; i=ri[i]) { cout<<v[i]<<" "; } return 0; } /* in: 4 1 0 2 1 1 0 2 3 3 out: 2 4 1 */




【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/150845789
https://blog.csdn.net/hnjzsyjyj/article/details/151970421
https://www.luogu.com.cn/problem/solution/P1160
https://blog.csdn.net/lq1990717/article/details/127429719




版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 5:48:41

RMBG-2.0入门必看:理解‘灵魂蓝图’Alpha Mask在后期合成中的价值

RMBG-2.0入门必看&#xff1a;理解‘灵魂蓝图’Alpha Mask在后期合成中的价值 你是不是经常遇到这样的烦恼&#xff1f;好不容易找到一张完美的产品图&#xff0c;想换个背景&#xff0c;却发现边缘毛糙&#xff0c;怎么处理都显得很假。或者&#xff0c;你想把人物抠出来放到…

作者头像 李华
网站建设 2026/5/10 16:06:45

小白必看:雯雯的后宫-造相Z-Image瑜伽女孩图片生成全攻略

小白必看&#xff1a;雯雯的后宫-造相Z-Image瑜伽女孩图片生成全攻略 1. 这个镜像到底能帮你做什么 你是不是也遇到过这些情况&#xff1a;想为瑜伽课程设计宣传图&#xff0c;却找不到既专业又自然的模特图&#xff1b;想给健身社群配图&#xff0c;但网上找的图片不是姿势不…

作者头像 李华
网站建设 2026/5/10 14:26:41

SiameseUIE部署教程:受限实例中Python路径与conda环境激活技巧

SiameseUIE部署教程&#xff1a;受限实例中Python路径与conda环境激活技巧 1. 为什么这个部署方案特别适合受限云环境 你有没有遇到过这样的情况&#xff1a;在一台系统盘只有40G的云服务器上&#xff0c;想跑一个信息抽取模型&#xff0c;结果刚pip install几个包&#xff0…

作者头像 李华
网站建设 2026/5/22 16:24:23

【专业词汇】世界著名5大学习方法

世界著名5大学习法完整教程 1. 费曼学习法&#xff08;Feynman Technique&#xff09; 核心概念 费曼学习法以诺贝尔物理学奖得主理查德费曼命名&#xff0c;核心理念是&#xff1a;通过用简单的语言向他人解释复杂概念来检验和深化自己的理解。如果无法用简单的话讲清楚&#…

作者头像 李华
网站建设 2026/5/3 8:16:36

星图平台实测:Qwen3-VL:30B多模态模型性能与效果展示

星图平台实测&#xff1a;Qwen3-VL:30B多模态模型性能与效果展示 你是否曾想象过&#xff0c;一个AI助手不仅能和你流畅对话&#xff0c;还能“看懂”你发过去的图片&#xff0c;甚至能分析图表、识别商品、描述场景&#xff1f;这听起来像是科幻电影里的场景&#xff0c;但今…

作者头像 李华
网站建设 2026/5/10 7:42:02

手把手教学:用Ollama玩转谷歌开源嵌入模型

手把手教学&#xff1a;用Ollama玩转谷歌开源嵌入模型 你是不是经常遇到这样的问题&#xff1a;想在自己的电脑上跑一个AI模型&#xff0c;但发现要么模型太大跑不动&#xff0c;要么部署过程太复杂直接劝退&#xff1f;特别是对于文本搜索、智能问答这类需要理解语义的任务&a…

作者头像 李华