7-11 吸铁石

块状的吸铁石,可以一个一个排成一排(类似麻将那样),相必大家小时候应该都玩过。那今天我们就来点不一样的,砸门用编程来潜玩一下!

假设一开始的虚拟桌子上是没有吸铁石的,现在你可以进行3种操作命令 :

  1. insert data index ,从虚拟背包中拿出一个字符为data的吸铁石,并将其插入下标为index之后(插入开头即index=0)
  2. pop ,将下标为1的吸铁石,放入虚拟背包
  3. 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;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值