洛谷-P1160 队列安排


题目

Problem Description

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

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

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

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

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

Input

输入文件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号同学已经不在队列中则忽略这一条指令。

Output

输入文件arrange.out仅包括1行,包含最多N个空格隔开的正整数,表示了队列从左到右所有同学的编号,行末换行且无空格。

Sample Input

4
1 0
2 1
1 0
2
3
3

 

Sample Output

2 4 1

 


题解

  纯粹是为了练一练数据结构中的双向链表的写法而选择的这道题,结果用malloc和指针实现的双向链表反而找不出好的方法,反而用数组实现的AC了……但是还是把40分的超时代码记下来,可能以后数据结构考试会用到吧……

  100分代码非常简单,但我可能写的还是不够简单。因为数据是按顺序且不重复给出的,所以用数组下标可以很好的知道储存的位置。相反,如果只用指针,一个一个找起来就会超时……


代码

100分代码:

#include <iostream>
using namespace std;
int n,m;
int used[100005];
struct DuLinkList{int prior;int next;
}dll[100005];
int main(){int k;bool t;cin >> n;dll[0].next=1;dll[0].prior=-1;dll[1].prior=0;dll[1].next=-1;for(int i=2;i<=n;i++){cin >> k >> t;if(t){dll[dll[k].next].prior=i;dll[i].next=dll[k].next;dll[k].next=i;dll[i].prior=k;}else{dll[dll[k].prior].next=i;dll[i].prior=dll[k].prior;dll[k].prior=i;dll[i].next=k;}}cin >> m;for(int i=1;i<=m;i++){cin >> k;if(used[k]!=1){used[k]=1;dll[dll[k].prior].next=dll[k].next;dll[dll[k].next].prior=dll[k].prior;}}for(int i=0;dll[i].next!=-1;i=dll[i].next){cout << dll[i].next;if(dll[dll[i].next].next!=-1)cout << " ";elsecout << endl;}return 0;
}

40分代码:

#include <iostream>
#include <stdlib.h>
#include <math.h>using namespace std;typedef int Status;
typedef int ElemType;class DLL{
public:void InitList(){L=(DuLNode*)malloc(sizeof(DuLNode));L->data=1;L->prior=NULL;L->next=(DuLNode*)malloc(sizeof(DuLNode));L->next->data=1;L->next->prior=L;L->next->next=NULL;}void DestroyList(){DuLNode *p,*q;p=L;while(p->next!=NULL){q=p->next;free(p);p=q;}}int LocateElem(ElemType e){int i=0;DuLNode *p=L;while(p->next!=NULL){p=p->next;i++;if(p->data==e)return i;}return 0;}void ListInsert(int i,ElemType e,bool t){DuLNode *p,*s;p=GetElemP(i);s=(DuLNode*)malloc(sizeof(DuLNode));if(t==1){s->data=e;s->prior=p;s->next=p->next;if(p->next!=NULL)  //这句话好重要啊……p->next->prior=s;p->next=s;}else{s->data=e;s->next=p;s->prior=p->prior;p->prior->next=s;p->prior=s;}L->data++;}void ListDelete(int i){DuLNode *p;p=GetElemP(i);p->prior->next=p->next;if(p->next!=NULL)  //这句话好重要啊……p->next->prior=p->prior;free(p);L->data--;}void PrintList(){DuLNode *p=L;for(int i=1;i<L->data;i++){p=p->next;cout << p->data << " ";}p=p->next;cout << p->data << endl;}
private:struct DuLNode{ElemType data;DuLNode *prior;DuLNode *next;};DuLNode *L;int ListLength(){return L->data;}DuLNode* GetElemP(int i){DuLNode *p=L;for(int j=1;j<=i;j++)p=p->next;return p;}
};DLL l;int m,n;int main(){int k;bool p;cin >> n;l.InitList();for(int i=1;i<n;i++){cin >> k >> p;l.prioristInsert(l.priorocateElem(k),i+1,p);}cin >> m;for(int i=1;i<=m;i++){cin >> k;if(l.priorocateElem(k)!=0)l.prioristDelete(l.priorocateElem(k));}l.PrintList();l.DestroyList();return 0;
}

 

转载于:https://www.cnblogs.com/skl-hray/p/7642485.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.HTML小结

HTML 基本文档 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>文档标题</title> </head> <body> 可见文本... </body> </html> <!DOCTYPE html>html文件声明。charset"UTF-8…

方法参数名称和Spring

继续之前的博客文章有关构造函数和方法参数以及Java在运行时不保留参数名称的情况–先前的文章涉及构造函数不保留参数名称及其对Spring中的Contructor注入的含义&#xff0c;在此我将介绍更多内容不保留参数名称的情况对Spring有影响&#xff1a; 1.考虑带参数的Spring MVC C…

Fragment Or DialogFragment Can not perform this action after onSaveInstanceState

转载&#xff1a;http://blog.csdn.net/chenshufei2/article/details/48747149 public void show(FragmentManager manager, String tag) {mDismissed false;mShownByMe true;FragmentTransaction ft manager.beginTransaction();ft.add(this, tag);ft.commit(); //注意这里…

php延迟更新,ThinkPHP开发指南-模型-高级模型之延迟更新

导航&#xff1a;上一页我们经常需要给某些数据表添加一些需要经常更新的统计字段&#xff0c;例如用户的积分、文件的下载次数等等&#xff0c;而当这些数据更新的频率比较频繁的时候&#xff0c;数据库的压力也随之增大不少&#xff0c;我们可以利用高级模型的延迟更新功能缓…

three.js制作3d模型工具_3D打印模型打磨抛光常用工具

对于追求更好模型品质的人来说&#xff0c;对3D打印模型进行后处理工作是必不可少的&#xff0c;而后处理&#xff0c;首要的便是对模型进行打磨、抛光&#xff0c;将不属于模型的耗材去除&#xff0c;提高表面光洁度。在此工作中&#xff0c;我们需要用到很多工具&#xff0c;…

Linux中文档去掉windows文本的多余的回车符(^M)

1) 使用sed 去掉windows下的回车符 &#xff08;注意^M 在linux 下写法 按^M 是回车换行符,输入方法是按住CTRLv,松开v,按m)sed -i s/^M//g filename 2) 在vim下类似 :%s/^M//g &#xff08;^M输入方法和上面方法相同&#xff09; 3) 使用dos2unix dos2unix filename 个人觉得第…

为何要清除浮动?如何清除?

原因&#xff1a; 元素设置了float属性后&#xff0c;就会脱离文档流&#xff0c;当 包含框 的高度小于 浮动框 的时候&#xff0c;会出现高度塌陷。因此才需要清除浮动&#xff01; 表现如图&#xff1a;包括框container已经包不住float的图片了&#xff01; 清除浮动方法&a…

Spring MVC错误处理示例

这篇文章描述了在Spring MVC 3中执行错误处理的不同技术。该代码在GitHub上的Spring-MVC-Error-Handling目录中可用。 它基于带有注释的Spring MVC示例。 在Spring 3之前处理异常 在Spring 3之前&#xff0c;使用HandlerExceptionResolvers处理异常。 此接口定义一个方法&…

PLSQL 学习之路(1)创建用户,表空间,表,数据

1.用SYS用户登录PL/SQL SYSXE as SYSDBA 2.创建表空间 create tablespace Mars datafile F:\oracle\Mars.dbf size 500M autoextend on next 100M maxsize unlimited logging extent management local autoallocate segment space management auto; 3.创建用户 create user Mar…

php数字取反,[转+自]关于PHP7的新特性(涉及取反和disabled_functions绕过)

PHP7和PHP5上的安全区别preg_replace()不再支持/e修饰符利用\e修饰符执行代码的后门大家也用了不少了&#xff0c;具体看官方的这段描述:如果设置了这个被弃用的修饰符&#xff0c; preg_replace() 在进行了对替换字符串的 后向引用替换之后, 将替换后的字符串作为php 代码评估…

如何关闭苹果手机自动扣费_教你关闭苹果手机系统的自动更新功能,旧手机还能再用几年!...

大家都知道&#xff0c;苹果手机在更新几个大版本后&#xff0c;手机不是变得非常卡&#xff0c;就是非常的耗电&#xff0c;大大的缩短了手机的使用寿命。所以&#xff0c;许多人都不会选择更新系统&#xff0c;但是手机只要连上WiFi并且在充电状态&#xff0c;就会在半夜自动…

meta标签的常见用法

一、定义和用法 <meta> 标签始终位于 head 元素中。<meta> 元素可提供有关页面的元信息&#xff08;meta-information&#xff09;&#xff0c;元数据不会显示在页面上&#xff0c;但是对于机器是可读的。比如针对搜索引擎和更新频度的描述和关键词。 元数据&…

HttpClient的使用

新引入Hutool-HttpUtil的使用&#xff08;更简单&#xff0c;更强大&#xff01;&#xff09;&#xff0c;详见&#xff1a;http://www.cnblogs.com/jiangbei/p/7667858.html 一、概述 1.简介 根据凡技术必登其官网的原则&#xff08;如果有&#xff09;&#xff0c;我们可以先…

四人帮–代理设计模式

代理是另一种结构设计模式 &#xff0c;可以“代表”另一个对象或“代替”另一个对象以访问后面的对象。 何时使用此模式&#xff1f; 当我们需要创建一个包装来覆盖客户端的主要对象的复杂性时&#xff0c;将使用代理模式。 有哪些使用场景&#xff1f; 虚拟代理–设想一种…

面试题38_数字在排序数组中出现的次数

题目描写叙述 统计一个数字在排序数组中出现的次数。解题思路 数组是排序的&#xff0c;所以反复出现的数字是相邻排列的。 用二分查找算法&#xff0c;找到第一次出现的位置。和 最后一次出现的位置。 推断第一次出现的位置条件为&#xff1a;当前数字的前一个是否与之相等。若…

Hex hsl 转换 php,关于 RGB,HEX,HSL 颜色相互转换

最近一段时间在折腾一个微信在线编辑器的项目&#xff0c;使用 UEditor 进行二次开发。关于 UEditor 的定制&#xff0c;用到的都太粗浅&#xff0c;官方文档上都能找得到。主题使用的样式表是 ueditor.css 而不是ueditor.min.css&#xff0c;定制主题要注意这一点。而对整个项…

使用inetaddress测试目标可达性_PDPS软件机器人虚拟仿真:Smart Place功能介绍与使用方法...

概述对于机器人工作站或生产线的虚拟仿真&#xff0c;很大一部分的作用是找出机器人与工装夹具等外围设备的最佳布局位置。市面上大多数的工业机器人虚拟仿真软件都有这种专门用于检测机器人与外围设备之间最佳布局位置的功能&#xff0c;比如DELMIA软件中的“Auto Place”功能…

JAVA基础3——常见关键字解读(1)

常见的JAVA中的关键字 static static静态变量 静态变量&#xff1a;使用static关键字定义的变量。static可以修饰变量和方法&#xff0c;也有static静态代码块。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说&#xff0c;它不依赖类特定的实例&#xff0c;被…

PostgreSQL PL / java简介

现代数据库允许以多种语言编写存储过程。 一种常见的实现语言是java.NB&#xff0c;本文讨论了PostgreSQL特定的Java实现。 其他数据库的详细信息会有所不同&#xff0c;但是概念是相同的。 PL / Java的安装 在Ubuntu系统上安装PL / Java很简单。 我将首先创建一个新模板templ…

强连通分量 圆桌骑士

题目描述 圆桌骑士是一个非常吸引人的职业。因此&#xff0c;在最近几年里&#xff0c;亚瑟王史无前例的扩招圆桌骑士&#xff0c;并不令人惊讶。现在这里有许多圆桌骑士&#xff0c;每个圆桌骑士都收到一份珍贵的邀请函&#xff0c;被邀请去英灵殿圆桌。这些骑士将要环绕着坐在…