• 洛谷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个空格隔开的正整数,表示了队列从左到右所有同学的编号,行末换行且无空格。

    输入输出样例

    输入样例#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<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 using namespace std;
     6 struct line{
     7     int pr,ne;
     8     bool mk;
     9 }a[200000];
    10 int n,m;
    11 int main(){
    12     scanf("%d",&n);
    13     int i,j;
    14     int k,p;
    15     a[0].ne=1;a[0].pr=0;
    16     a[1].mk=1;a[1].pr=0;
    17     for(i=2;i<=n;i++){
    18         scanf("%d%d",&k,&p);
    19         a[i].mk=1;
    20         if(!p){
    21             a[a[k].pr].ne=i;
    22             a[i].pr=a[k].pr;
    23             a[k].pr=i;
    24             a[i].ne=k;
    25         }
    26         else{
    27             a[a[k].ne].pr=i;
    28             a[i].pr=k;
    29             a[i].ne=a[k].ne;
    30             a[k].ne=i;
    31         }
    32     }
    33     scanf("%d",&m);
    34     int x;
    35     for(i=1;i<=m;i++){
    36         scanf("%d",&x);
    37         if(!a[x].mk)continue;
    38         a[x].mk=0;
    39         a[a[x].pr].ne=a[x].ne;
    40         a[a[x].ne].pr=a[x].pr;
    41     }
    42     printf("%d",a[0].ne);
    43     int now=a[0].ne;now=a[now].ne;
    44     while(now){
    45         printf(" %d",now);
    46         now=a[now].ne;
    47     }
    48     cout<<endl;
    49     return 0;
    50 }
  • 相关阅读:
    原码、补码、反码
    处理器体系结构
    CSAPP学习笔记—虚拟内存
    Sequence Models
    Neural Networks and Deep Learning
    windows7_下Eclipse中部署tomcat7.0进行JSP+servlet开发
    used in key specification without a key length
    在jsp页面下, 让eclipse完全支持HTML/JS/CSS智能提示
    求知若饥,虚心若愚
    C指针右左法则
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/5682829.html
Copyright © 2020-2023  润新知