news 2026/6/10 0:58:05

洛谷 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/6/9 23:54:16

清音刻墨在教育场景落地:网课视频自动打轴字幕生成案例

清音刻墨在教育场景落地&#xff1a;网课视频自动打轴字幕生成案例 1. 引言&#xff1a;教育视频的字幕痛点与解决方案 在线教育已经成为现代学习的重要方式&#xff0c;但很多老师和机构在制作网课视频时都面临一个共同难题&#xff1a;如何快速准确地为视频添加字幕。传统的…

作者头像 李华
网站建设 2026/6/10 0:00:01

小白友好:星图平台部署Qwen3-VL:30B图文教程

小白友好&#xff1a;星图平台部署Qwen3-VL:30B图文教程 1. 你能学会什么&#xff1f;零基础也能上手的多模态办公助手搭建指南 你是不是也遇到过这些场景&#xff1a; 想快速分析一张产品截图里的参数表格&#xff0c;却要手动抄写再整理&#xff1f;飞书群里同事发来十几张…

作者头像 李华
网站建设 2026/6/9 19:54:25

保姆级指南:CTC语音唤醒模型在智能家居中的应用

保姆级指南&#xff1a;CTC语音唤醒模型在智能家居中的应用 1. 为什么你需要一个轻量级语音唤醒方案 你有没有遇到过这样的场景&#xff1a;在厨房煮着汤&#xff0c;手沾满油渍&#xff0c;想调低客厅空调温度却得放下锅铲、擦干手、掏出手机——等你点开APP&#xff0c;汤可…

作者头像 李华
网站建设 2026/6/9 19:54:37

DAMO-YOLO手机检测镜像生产环境部署:Docker容器化封装指南

DAMO-YOLO手机检测镜像生产环境部署&#xff1a;Docker容器化封装指南 1. 项目概述 1.1 什么是DAMO-YOLO手机检测系统 这是一个基于DAMO-YOLO深度学习模型的手机检测解决方案&#xff0c;专门针对移动端和边缘计算场景优化。系统能够实时检测图像中的手机设备&#xff0c;准…

作者头像 李华
网站建设 2026/6/9 22:51:20

VibeVoice小白入门:3步完成你的第一个语音作品

VibeVoice小白入门&#xff1a;3步完成你的第一个语音作品 想试试用AI给自己做个有声书&#xff0c;或者给视频配个旁白&#xff0c;但又觉得技术门槛太高&#xff1f;别担心&#xff0c;今天咱们就来聊聊VibeVoice这个工具&#xff0c;它能让语音合成变得像发微信语音一样简单…

作者头像 李华
网站建设 2026/6/9 21:24:29

基于UNet的cv_unet_image-colorization图像上色效果展示:老照片焕新案例集

基于UNet的cv_unet_image-colorization图像上色效果展示&#xff1a;老照片焕新案例集 1. 项目简介与核心原理 cv_unet_image-colorization 是一个基于深度学习技术的智能图像上色工具&#xff0c;它采用了业界公认的高效UNet网络架构。这个工具最大的特点是能够将黑白老照片…

作者头像 李华