题目描述

一个学校里老师要将班上 NNN 个同学排成一列,同学被编号为 $1~N$ ,他采取如下的方法:

  1. 先将 111 号同学安排进队列,这时队列中只有他一个人;

  2. 2−N2-N2−N 号同学依次入列,编号为i的同学入列方式为:老师指定编号为i的同学站在编号为 1−(i−1)1-(i -1)1−(i−1) 中某位同学(即之前已经入列的同学)的左边或右边;

3.从队列中去掉 M(M<N)M(M<N)M(M<N) 个同学,其他同学位置顺序不变。

在所有同学按照上述方法队列排列完毕后,老师想知道从左到右所有同学的编号。

输入输出格式

输入格式:

第 111 行为一个正整数 NNN ,表示了有 NNN 个同学。

第 2−N2-N2−N 行,第 iii 行包含两个整数 k,pk,pk,p ,其中 kkk 为小于 iii 的正整数, ppp 为 000 或者 111 。若 ppp 为 000 ,则表示将 iii 号同学插入到 kkk 号同学的左边, ppp 为 111 则表示插入到右边。

第 N+1N+1N+1 行为一个正整数 MMM ,表示去掉的同学数目。

接下来 MMM 行,每行一个正整数 xxx ,表示将 xxx 号同学从队列中移去,如果 xxx 号同学已经不在队列中则忽略这一条指令。

输出格式:

111 行,包含最多 NNN 个空格隔开的正整数,表示了队列从左到右所有同学的编号,行末换行且无空格。

输入输出样例

输入样例#1: 复制

4
1 0
2 1
1 0
2
3
3
输出样例#1: 复制

2 4 1

说明

样例解释:

将同学 222 插入至同学 111 左边,此时队列为:

212 121

将同学 333 插入至同学 222 右边,此时队列为:

2312 3 1231

将同学 444 插入至同学 111 左边,此时队列为:

23412 3 4 12341

将同学 333 从队列中移出,此时队列为:

2412 4 1241

同学 333 已经不在队列中,忽略最后一条指令

最终队列:

2412 4 1241

数据范围

对于 20%20\%20% 的数据,有 N≤10N≤10N≤10 ;

对于 40%40\%40% 的数据,有 N≤1000N≤1000N≤1000 ;

对于 100%100\%100% 的数据,有 N,M≤100000N, M≤100000N,M≤100000 。

就是一个基础链表,挺简单的。

 #include<iostream>
#include<cstdio>
using namespace std;
const int N=;
int n,m;
bool b[N];
struct node
{
int l,r;
}a[N];
void ins(int x,int y,int d)
{
if(d==)
a[x].l=a[y].l,a[x].r=y,a[a[y].l].r=x,a[y].l=x;
else
a[x].r=a[y].r,a[x].l=y,a[a[y].r].l=x,a[y].r=x;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
a[i].l=a[i].r=-;
a[].l=,a[].r=n+;
for(int i=;i<=n;i++)
{
int k,p;
scanf("%d%d",&k,&p);
ins(i,k,p);
}
scanf("%d",&m);
while(m--)
{
int x;
scanf("%d",&x);
if(!b[x])
{
b[x]=;
a[a[x].l].r=a[x].r;
a[a[x].r].l=a[x].l;
a[x].l=a[x].r=-;
}
}
for(int i=;i<=n;i++)
if(!b[i]&&a[i].l==)
{
int t=i;
printf("%d ",t);
while(a[t].r!=n+)
{
t=a[t].r;
printf("%d ",t);
}
printf("\n");
}
return ;
}

洛谷 P1160 队列安排的更多相关文章

  1. 洛谷 P1160 队列安排 Label:链表 数据结构

    题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...

  2. 洛谷P1160 队列安排

    题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...

  3. 洛谷P1160——队列安排(双向链表)

    题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...

  4. 洛谷——P1160 队列安排(链表的基础操作)

    #include<bits/stdc++.h> using namespace std; ]; list<int> stus; list<];//用来存放每一项的迭代器 ...

  5. luogu P1160 队列安排

    二次联通门 :luogu P1160 队列安排 /* luogu P1160 队列安排 链表 手动模拟一下就好了... */ #include <cstdio> #define Max 5 ...

  6. AC日记——队列安排 洛谷 P1160

    队列安排 思路: 链表裸题: 来,上代码: #include <cstdio> #include <cstring> #include <iostream> usi ...

  7. 队列 P1160 队列安排(啊啊 不会啊)

    洛谷 题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为 ...

  8. [洛谷P2365] 任务安排

    洛谷题目链接:任务安排 题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时 ...

  9. 洛谷P2365 任务安排(斜率优化dp)

    传送门 思路: 最朴素的dp式子很好考虑:设\(dp(i,j)\)表示前\(i\)个任务,共\(j\)批的最小代价. 那么转移方程就有: \[ dp(i,j)=min\{dp(k,j-1)+(sumT ...

随机推荐

  1. Feature Extractor[content]

    0. AlexNet 1. VGG VGG网络相对来说,结构简单,通俗易懂,作者通过分析2013年imagenet的比赛的最好模型,并发现感受野还是小的好,然后再加上<network in ne ...

  2. Spring Boot 之使用 Json 详解

    Spring Boot 之使用 Json 详解 简介 Spring Boot 支持的 Json 库 Spring Web 中的序列化.反序列化 指定类的 Json 序列化.反序列化 @JsonTest ...

  3. A2dp sink 初始化流程源码分析

    A2dp sink的初始化流程和A2dp 的初始化流程,基本一样,这里做简单分析.这里分析的android的版本是Android O. 我们先从service的启动说起吧. 下面 是启动的时候的log ...

  4. C# socket实践 - 简易版FTP(Server & Client)

    写了个简易版的ftp(服务器和客户端),运行效果如下图: click download下载中的UI: 原理:模仿正规ftp方式,分成2个socket连接:文本命令socket.数据信道socket. ...

  5. Python从菜鸟到高手(7):字符串

    1. 单引号字符串和转义符   字符串与数字一样,都是值,可以直接使用,在Python控制台中直接输入字符串,如"Hello World",会按原样输出该字符串,只不过用单引号括了 ...

  6. 【Java并发.5】基础构建模块

    本章会介绍一些最有用的并发构建模块,有丶东西(最后一小节,纯干货). 5.1 同步容器类 同步容器类包括 Vector 和 Hashtable ,这些类实现线程安全的方式是:将它们的状态封装起来,并对 ...

  7. Linux iptables 命令

    iptables 是 Linux 管理员用来设置 IPv4 数据包过滤条件和 NAT 的命令行工具.iptables 工具运行在用户态,主要是设置各种规则.而 netfilter 则运行在内核态,执行 ...

  8. tkinter python(图形开发界面)

    Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macinto ...

  9. SAI窗口无法移动

    昨天开SAI遇到了一个很奇怪的问题,改变了双屏的位置后SAI的窗口不能移动两边也有黑边,貌似是这样,标题栏只能进行上下改变窗口大小,不能移动窗体 问题是这样出现的:把任务栏解除锁定拖到侧边就会这样 解 ...

  10. Rimworld单人生存记

    开局什么也没有,第一天按原来的墙造了个卧室差不多就完了,可见工作效率之低.花了三四天才种好水稻+草莓,做了短弓,挖了一些钢铁,造了燃料炉灶和屠宰台.第五天来了个人,我用短弓和他打,问题是远程最多打一下 ...