军训

实验任务

小 M 在大一军训时,遇到了一个奇怪的教官。这个教官提出了一个奇怪的要求。他让小M 班的同学们排成一队,然后他开始喊左边第 X 个或者右边第 X 个同学出列,按出列顺序排成新的一队。请根据原来的编号输出新的序列。

数据输入

输入第一行包括一个正整数 N(N<=10000),表示队伍人数。接下来 N 行,每行包括一个字母和一个 int 型整数 ai,字母 L 表示左边数起,字母 R 表示右边数起,数字 ai 表示第ai 个同学出列。 (0

数据输出

输出 N 个数字表示新队伍的同学对应的原编号的序列。

输入示例

5
L 3
R 3
L 3
L 2
R 1

输出示例

3 2 5 4 1

解题思路

见注释

参考代码

#include <iostream>  
#include <cstdio>   
#include <vector>  
using namespace std;  
int main()  
{  
    int n,i;  
    while (~scanf("%d",&n)){  
        vector<int> v,que;  
        for (i = 1;i <= n;i++) //v中存 1,2,...,n 
            v.push_back(i);  
        char opr;  
        int num;  
        for (i = 1;i <= n;i++){  
            scanf(" %c%d",&opr,&num);  
            if (opr == 'L'){  
                que.push_back(v[num-1]); //左边第num个加到新队列 
                v.erase(v.begin()+num-1);  //删除v中对应的元素
            }else if (opr == 'R'){  
                que.push_back(v[v.size()-num]);
                v.erase(v.end()-num);                 
            }  
        }  
        for (i = 0;i < n;i++)  
            printf("%d ",que[i]);  
        printf("\n");  
    }  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值