https://www.luogu.org/problem/show?pid=1160

题目描述

一个学校里老师要将班上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个空格隔开的正整数,表示了队列从左到右所有同学的编号,行末换行且无空格。

输入输出样例

输入样例#1:

  1. 4
  2. 1 0
  3. 2 1
  4. 1 0
  5. 2
  6. 3
  7. 3
输出样例#1:

  1. 2 4 1
  2.  
  3. 将同学2插入至同学1左边,此时队列为:
  4. 2 1
  5. 将同学3插入至同学2右边,此时队列为:
  6. 2 3 1
  7. 将同学4插入至同学1左边,此时队列为:
  8. 2 3 4 1
  9. 将同学3从队列中移出,此时队列为:
  10. 2 4 1
  11. 同学3已经不在队列中,忽略最后一条指令
  12. 最终队列:
  13. 2 4 1

说明

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

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

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

  1. #include <algorithm>
  2. #include <iostream>
  3. #define N 1000015
  4.  
  5. using namespace std;
  6.  
  7. int n,x,y,m;
  8. struct node
  9. {
  10. int pre,next;
  11. }que[N];
  12.  
  13. int main()
  14. {
  15. cin>>n;
  16. que[].next=;
  17. que[].pre=,que[].next=-;
  18. for(int i=;i<=n;i++)
  19. {
  20. cin>>x>>y;
  21. if(y)
  22. {
  23. que[que[x].next].pre=i;
  24. que[i].next=que[x].next;
  25. que[x].next=i;
  26. que[i].pre=x;
  27. }
  28. else
  29. {
  30. que[i].pre=que[x].pre;
  31. que[que[x].pre].next=i;
  32. que[x].pre=i;
  33. que[i].next=x;
  34. }
  35. }
  36.  
  37. cin>>m;
  38. for(int i=;i<=m;i++)
  39. {
  40. cin>>x;
  41. if(que[x].next==-&&que[x].pre==-) continue;
  42. que[que[x].pre].next=que[x].next;
  43. que[que[x].next].pre=que[x].pre;
  44. que[x].next=que[x].pre=-;
  45. }
  46. int k=que[].next;
  47. while(k!=-)
  48. {
  49. cout<<k<<" ";
  50. k=que[k].next;
  51. }
  52. return ;
  53. }

队列,链表

  1. #include <algorithm>
  2. #include <iostream>
  3. #define N 100005
  4.  
  5. using namespace std;
  6.  
  7. int n,m,x,y,z,top;
  8. int que[N];
  9. int vis[N];
  10.  
  11. int main()
  12. {
  13. cin>>n;
  14. que[++top]=;
  15. for(int i=;i<=n;i++)
  16. {
  17. cin>>x>>y;
  18. if(y==)
  19. {
  20. for(int j=;j<=top;j++)
  21. {
  22. if(que[j]==x)
  23. {
  24. top++;
  25. for(int k=top;k>j;k--)
  26. que[k]=que[k-];
  27. que[j]=i;
  28. break;
  29. }
  30. }
  31. }
  32. else
  33. {
  34. for(int j=;j<=top;j++)
  35. {
  36. if(que[j]==x)
  37. {
  38. top++;
  39. for(int k=top;k>=j;k--)
  40. que[k+]=que[k];
  41. que[j+]=i;
  42. break;
  43. }
  44. }
  45. }
  46. }
  47. cin>>m;
  48. for(int i=;i<=m;i++)
  49. {
  50. cin>>x;
  51. vis[x]=;
  52. if(vis[x])
  53. for(int j=;j<=top;j++)
  54. {
  55. if(que[j]==x)
  56. {
  57. for(int k=j;k<top;k++)
  58. que[k]=que[k+];
  59. top--;
  60. break;
  61. }
  62. }
  63. }
  64. for(int i=;i<=top;i++)
  65. cout<<que[i]<<" ";
  66. return ;
  67. }

纯模拟 T一大半

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

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

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

  2. luogu P1160 队列安排

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

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

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

  4. NOIP2016Day2T2蚯蚓(队列+坑爹洛谷毁我青春)

    “卡常技术哪家强,中国OJ找洛谷” 去掉两个语句之后...95-->100 题目大意就不说了QWQ 首先65分裸优先队列,线段树,堆都可以... 100分:开三个队列,第一个存没被砍过的蚯蚓(要 ...

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

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

  6. 洛谷 P1160 队列安排

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

  7. P1160 队列安排 luogu洛谷

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

  8. 洛谷P1160 队列安排

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

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

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

随机推荐

  1. Windows10系统切换JDK版本(前提是装了多个版本的JDK)

    由于是直接截屏,等我回过头来整理的时候忘记了文章原来的出处, 如作者本人看到,如有侵权,请联系删除!

  2. AJPFX总结mysql复制表结构,表数据

    1.复制表结构及数据到新表CREATE TABLE 新表 SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete from newtable; ...

  3. 用css制作圆环图表 (vue,sass)

    效果图: 思路 :在一个容器里再放两个矩形,每个矩形都占一半,给这两个矩形都设置溢出隐藏,当去旋转矩形里面的圆形的时候,溢出部分就被隐藏掉了,这样就可以达到想要的效果. 代码-html: <di ...

  4. git ---匿名分支和checkout命令

    git checkout -b   //创建一个匿名分支

  5. vscode显示php函数列表

    1.安装插件支持 https://marketplace.visualstudio.com/items?itemName=linyang95.php-symbols 2.ctrt+shift+o 即可 ...

  6. mysql执行语句汇总

    插入select的数据 INSERT INTO `test1`( order_id, goods_id, goods_name, goods_sn, product_id, goods_number, ...

  7. [转载]迅为4418开发板Qt移植移动4G模块第一部分

        本文转自迅为论坛:http://topeetboard.com   平台:iTOP-4418开发板   1.首先要配置内核,这个一步和Android系统移植3G或者4G模块是一样的.一般模块的 ...

  8. jquery中ajax使用error调试错误

    error:function (XMLHttpRequest, textStatus, errorThrown) { } XMLHttpRequest.readyState状态码  0:未初始化还没有 ...

  9. slover层解读

    void Solver<Dtype>::UpdateSmoothedLoss(Dtype loss, int start_iter, int average_loss) { if (los ...

  10. Duplicate fragment name ERROR Jetty Maven Plugin

    http://stackoverflow.com/questions/5802096/duplicate-fragment-name-error-jetty-maven-plugin 4down vo ...