zoukankan      html  css  js  c++  java
  • P1160 队列安排 洛谷

     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:
    4
    1 0
    2 1
    1 0
    2
    3
    3
    输出样例#1:
    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。

     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[0].next=1;
    17     que[1].pre=0,que[1].next=-1;
    18     for(int i=2;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=1;i<=m;i++)
    39     {
    40         cin>>x;
    41         if(que[x].next==-1&&que[x].pre==-1)    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=-1;
    45     }
    46     int k=que[0].next;
    47     while(k!=-1)
    48     {
    49         cout<<k<<" ";
    50         k=que[k].next;
    51     }
    52     return 0;
    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]=1;
    15     for(int i=2;i<=n;i++)
    16     {
    17         cin>>x>>y;
    18         if(y==0)
    19         {
    20             for(int j=1;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-1];
    27                     que[j]=i;
    28                     break;
    29                 }
    30             }
    31         }
    32         else
    33         {
    34             for(int j=1;j<=top;j++)
    35             {
    36                 if(que[j]==x)
    37                 {
    38                     top++;
    39                     for(int k=top;k>=j;k--)
    40                         que[k+1]=que[k];
    41                     que[j+1]=i;
    42                     break;
    43                 }
    44             }
    45         }
    46     }
    47     cin>>m;
    48     for(int i=1;i<=m;i++)
    49     {
    50         cin>>x;
    51         vis[x]=1;
    52         if(vis[x])
    53         for(int j=1;j<=top;j++)
    54         {
    55             if(que[j]==x)
    56             {
    57                 for(int k=j;k<top;k++)
    58                     que[k]=que[k+1];
    59                 top--;
    60                 break;
    61             }
    62         }
    63     }
    64     for(int i=1;i<=top;i++)
    65         cout<<que[i]<<" ";
    66     return 0;
    67 }
    纯模拟 T一大半
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    10. 正则表达式匹配
    svn 类似.gitignore功能实现
    GF学习未解之谜
    cocos
    unity 编辑器内对Game视图进行截图
    Roughlike游戏里面的随机数种子
    网站推荐——游戏图标网
    Unity 使用image绘制线段 直线
    c# unity 异步任务队列
    Unity编辑器调用外部exe程序 和 windows文件夹
  • 原文地址:https://www.cnblogs.com/Shy-key/p/6582432.html
Copyright © 2011-2022 走看看