P1160 队列安排
题目描述
一个学校里老师要将班上N个同学排成一列,同学被编号为1~N,他采取如下的方法:
1.先将1号同学安排进队列,这时队列中只有他一个人;
2.2~N号同学依次入列,编号为i的同学入列方式为:老师指定编号为i的同学站在编号为1~i -1中某位同学(即之前已经入列的同学)的左边或右边;
3.从队列中去掉M(M<N)个同学,其他同学位置顺序不变。
在所有同学按照上述方法队列排列完毕后,老师想知道从左到右所有同学的编号。
输入输出格式
输入格式:
输入文件arrange.in的第1行为一个正整数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号同学已经不在队列中则忽略这一条指令。
输出格式:
输入文件arrange.out仅包括1行,包含最多N个空格隔开的正整数,表示了队列从左到右所有同学的编号,行末换行且无空格。
输入输出样例
4
1 0
2 1
1 0
2
3
3
2 4 1 将同学2插入至同学1左边,此时队列为:
2 1
将同学3插入至同学2右边,此时队列为:
2 3 1
将同学4插入至同学1左边,此时队列为:
2 3 4 1
将同学3从队列中移出,此时队列为:
2 4 1
同学3已经不在队列中,忽略最后一条指令
最终队列:
2 4 1
说明
对于20%的数据,有N≤10;
对于40%的数据,有N≤1000;
对于100%的数据,有N, M≤100000。
标签是队列但是正解是链表。。
思路比较清晰,就是个链表。
但是逻辑可能稍微有点复杂
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int read(int & n)
{
char c='-';int x=;
while(c<''||c>'')c=getchar();
while(c>=''&&c<='')
{
x=x*+(c-);
c=getchar();
}
n=x;
}
const int MAXN=;
struct node
{
int pre,nxt,pos,flag;
}s[MAXN];
int n,m,where,how;
int main()
{
read(n);
for(int i=;i<=n;i++)
{
s[i].flag=;// 一开始肯定都会出现
s[i].pos=;
s[i].pre=;
s[i].nxt=;
}
s[].pos=;
for(int i=;i<=n;i++)
{
read(where);// 目标同学
read(how);
if(how==)// 左边
{
s[s[where].pre].nxt=i;
s[i].pre=s[where].pre;
s[where].pre=i;
s[i].nxt=where;
if(s[where].pos==)
{
s[where].pos=;
s[i].pos=;
}
}
else
{
s[s[where].nxt].pre=i;
s[i].nxt=s[where].nxt;
s[where].nxt=i;
s[i].pre=where; }
} read(m);
for(int i=;i<=m;i++)
{
read(where);
if(s[where].flag==)continue;
if(s[where].pos==)
s[s[where].nxt].pos=;
s[where].flag=;
s[s[where].pre].nxt=s[where].nxt;
s[s[where].nxt].pre=s[where].pre;
}
for(int i=;i<=n;i++)
{
if(s[i].pos==)
{
printf("%d ",i);
int p=s[i].nxt;
while(p!=)
{
printf("%d ",p);
p=s[p].nxt;
}
}
}
return ;
}
P1160 队列安排的更多相关文章
- luogu P1160 队列安排
二次联通门 :luogu P1160 队列安排 /* luogu P1160 队列安排 链表 手动模拟一下就好了... */ #include <cstdio> #define Max 5 ...
- 洛谷 P1160 队列安排 Label:链表 数据结构
题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...
- 洛谷 P1160 队列安排
题目描述 一个学校里老师要将班上 NNN 个同学排成一列,同学被编号为 $1-N$ ,他采取如下的方法: 先将 111 号同学安排进队列,这时队列中只有他一个人: 2−N2-N2−N 号同学依次入列, ...
- P1160 队列安排 luogu洛谷
题目描述 一个学校里老师要将班上NNN个同学排成一列,同学被编号为1∼N1\sim N1∼N,他采取如下的方法: 先将111号同学安排进队列,这时队列中只有他一个人: 2−N2-N2−N号同学依次入列 ...
- 队列 P1160 队列安排(啊啊 不会啊)
洛谷 题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为 ...
- 洛谷P1160 队列安排
题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...
- P1160 队列安排 洛谷
https://www.luogu.org/problem/show?pid=1160 题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进 ...
- 洛谷P1160——队列安排(双向链表)
题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...
- Luogu P1160队列安排【链表/老文搬家】By cellur925
原文发表于2018-04-15 08:15:09,我的luogu博客qwq. 看到题以后,要求维护一个可在任意位置修改添加删除元素的序列,那么显然我们可以用到链表. 然而本蒟蒻不久前刚刚学会链表.链表 ...
随机推荐
- html5视频播放器 二 (功能实现及播放优化)
样式改写css,其中的一些按钮是在“阿里妈妈”上找的字体图标,就不向上传了. /* *CoolPlay视频播放器 * 2016年8月1日 * 627314658@qq.com * */ @font-f ...
- maven bug之Maven:Non-resolvable parent POM: Failure to find错误
使用Maven编译淘宝的TimeTunnel项目时遇到如下错误: [INFO] Scanning for projects...[ERROR] The build could not read 1 p ...
- yarn之安装依赖包
安装依赖关系 yarn install用于安装项目的所有依赖项.依赖关系从您的项目package.json文件中检索,并存储在yarn.lock文件中. 开发包时,安装依赖关系最常见的是在 您刚刚检出 ...
- io口的作用
I/O接口的作用 主机与外界交换信息称为输入/输出(I/O).主机与外界的信息交换是通过输入/输出设备进行的.一般的输入/输出设备都是机械的或机电相结合的产物,比方常规的外设有键盘.显示器.打 ...
- ubuntu下apache+mysql+php+mysql等之webserver搭建
相信非常多人跟我一样,想搭建一个自己的webserver.网上资料非常多.可是因为版本号的区别,总是存在依照一个教程来做无法全然实现的问题.近期我也折腾了好几天,google不能用,仅仅能百度,真想说 ...
- 免安装版TOMCAT配置及问题解决方法
前言 本文将介绍下面几点内容: 1.Tomcat的配置过程 2.启动startup过程中遇到的问题的解决 3.假设遇到本文中没有提到的问题怎样解决 配置 计算机右击->属性->高级系统设置 ...
- jdk、jre、spring、java ee、java se
1 java se.java ee和java me 这三个是java的标准.java se是根本,java ee建立在java se上,用于server.java me是java se的子集,用于终端 ...
- 有意思的RTL函数RegisterClass(在持久化中,你生成的一个新类的对象,系统并不知道他是如何来的,因此需要你注册)good
例子1:Delphi中使用纯正的面向对象方法(这个例子最直接) Delphi的VCL技术使很多程序员能够非常快速的入门:程序员门只要简单的拖动再加上少量的几个Pascal语句,呵呵,一个可以运行得非常 ...
- cssTest
html <!doctype html> <html> <head> <meta charset="utf-8"> <meta ...
- 修改spring boot 启动logo
修改spring boot 启动logo 在项目添加文件banner.txt,将需要的logo写在里面 效果: