实验任务
小 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");
}
}