块状的吸铁石,可以一个一个排成一排(类似麻将那样),相必大家小时候应该都玩过。那今天我们就来点不一样的,砸门用编程来潜玩一下!
假设一开始的虚拟桌子上是没有吸铁石的,现在你可以进行3种操作命令 :
- insert data index ,从虚拟背包中拿出一个字符为data的吸铁石,并将其插入下标为index之后(插入开头即index=0)
- pop ,将下标为1的吸铁石,放入虚拟背包
- reverse , 将一排的吸铁石,从头到反翻转一下(即左右位置互换)
每块吸铁石的下标从左到右一次为 1 ~ N,且每块吸铁石上都刻有一个字符(字符为ASCII范围之内可有效现实的)。
每进行一次操作命令,编号下标都得从左到右边重新从1开始算!
每进行一次操作,都嘚从左到右打印一次当前排列,如果排列为空,输出EMPTY
如果操作不合法,请无视本次操作,但仍需打印当前排列
虚拟背包中有数不尽的各种类型的吸铁石
输入格式:
第一行给出一个正整数N[1,50000],表示接下来要给的操作数量;随后N行,每行给出上述三种操作命令的其中之一
输入保证桌面上的吸铁石始终不会超过101块
输出格式:
对于每个操作,给出N行按照上述要求的回复即可
输入样例:
14
pop
insert a 1
insert a 100
insert _ 0
insert T 0
insert T 2
insert ~ 3
reverse
pop
reverse
pop
reverse
pop
pop
输出样例:
EMPTY
EMPTY
EMPTY
_
T_
T_T
T_T~
~T_T
T_T
T_T
_T
T_
_
EMPTY
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
vector<unsigned char> a;
string str;
unsigned char b;
int index;
for(int p=0;p<n;p++)
{
cin>>str;
if(str=="insert")
{
cin>>b>>index;
if(index<=a.size())
a.insert(a.begin()+index,b);
}
else if(str=="reverse")
{
if(a.size()>0)
reverse(a.begin(),a.end());
}
else if(str=="pop")
{
if(a.size()>=1)
a.erase(a.begin());
}
if(!a.empty())
{
for(char ch : a)
cout<<ch;
cout<<endl;
}
else
cout<<"EMPTY"<<endl;
}
return 0;
}