8 solutions

  • 0
    @ 2022-1-2 9:56:42

    主要不会就上网查资料,多写几遍,就应该懂了

    #include <cstdio>
    #include <cstring>
    #include <queue>
    #include <deque>
    #include <algorithm>
    using namespace std;
    const int N=1e6+7;
    int main()
    {
        deque<int>q;//创建一个双向队列 
        while(!q.empty())//将这个双向队列清空
            q.pop_front();
        int n,a,i,m[N]= {0};
        scanf("%d",&n);
        for(i=1; i<=n; i++)
        {
            char s[10];
            scanf(" %s",s);
            if(!strcmp(s,"LIN"))//将输入的字符串与“LIN”进行匹配,成功就进行下列操作
            {
                scanf("%d",&a);
                q.push_front(a);//将输入的数从左边放入,也就是从头部放入
            }
            else if(!strcmp(s,"RIN"))//与上面类似
            {
                scanf("%d",&a);
                q.push_back(a);//从右边放入,也就是从尾部放入
            }
            else if(!strcmp(s,"LOUT"))
            {
                if(!q.empty())
                    q.pop_front();//从左边(头部)删除
                else
                    m[i]++;//记录位置
            }
            else if(!strcmp(s,"ROUT"))
            {
                if(q.empty())
                    m[i]++;   
                else
                    q.pop_back();//从右边(尾部)删除
            }
        }
        printf("%d",q.front()); //输出队列中的数
        q.pop_front();//同时删除
        while(!q.empty())//当队列不为空时继续输出然后删除直到队列中为空
        {
            printf(" %d",q.front());
        q.pop_front();
        }
        printf("\n");
        for(i=1; i<=n; i++)//输出不合法的操作
            if(m[i])
                printf("%d ERROR\n",i);
        return 0;
    }
    

    Information

    ID
    1125
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    6
    Tags
    # Submissions
    136
    Accepted
    43
    Uploaded By