zoukankan      html  css  js  c++  java
  • 双端队列篇deque SDUT OJ 双向队列

    双向队列

    Time Limit: 1000MS Memory limit: 65536K

    题目描述

          想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首;两头都可以做出队,入队的操作。
    现在给你一系列的操作,请输出最后队列的状态;
    命令格式:
    LIN X  X表示一个整数,命令代表左边进队操作;
    RIN X  表示右边进队操作;
    ROUT
    LOUT   表示出队操作;

    输入

    第一行包含一个整数M(M<=10000),表示有M个操作;
    以下M行每行包含一条命令;
    命令可能不合法,对于不合法的命令,请在输出中处理;

    输出

    输出的第一行包含队列进行了M次操作后的状态,从左往右输出,每两个之间用空格隔开;
    以下若干行处理不合法的命令(如果存在);
    对于不合法的命令,请输出一行X ERROR
    其中X表示是第几条命令;

    示例输入

    8
    LIN 5
    RIN 6
    LIN 3
    LOUT
    ROUT
    ROUT
    ROUT
    LIN 3

    示例输出

    3
    7 ERROR

    双端队列的典型操作模拟题!一开始读错题了,WA一次!
    注意:先输出处理完这m条命令后 队列里还有什么数据, 然后再依次输出报错的指令信息!
    #include <iostream>
    #include <string>
    #include <stdio.h>
    #include <string.h>
    #include <map>
    #include <stack>
    #include <deque> //双端队列
    #include <algorithm>
    #include <ctype.h>
    
    using namespace std;
    
    
    int a[20000], e;
    
    int main()
    {
        int m;
        cin>>m;
        int i, j, dd;
        string s;
        deque<int>q;
        deque<int>::iterator it;
    
        for(i=1; i<=m; i++)
        {
            cin>>s;
            if(s=="LIN")
            {
                cin>>dd;
                q.push_front(dd);
            }
            else if(s=="RIN")
            {
                cin>>dd;
                q.push_back(dd);
            }
            else if(s=="LOUT")
            {
                if(q.empty())
                {
                    a[e++]=i;
                }
                else
                {
                    q.pop_front();
                }
            }
            else if(s=="ROUT")
            {
                if(q.empty())
                {
                    a[e++]=i;
                }
                else
                {
                    q.pop_back();
                }
            }
        }
    
        int flag=0;
        for(it=q.begin(); it!=q.end(); it++)
        {
            if(flag==0)
            {
                printf("%d", *it );
                flag=1;
            }
            else if(flag==1)
            {
                printf(" %d", *it );
            }
        }
    
        if(flag==1)
        {
            printf("
    ");  //如果flag==1 就表示最后状态的队列里还有数据,输出完这些数据后就要输出换行! 如果flag==0, 则没有必要换行了!
        }
        for(j=0; j<e; j++)
        {
            printf("%d ERROR
    ", a[j] );
        }
        return 0;
    }
    
     
  • 相关阅读:
    从程序员转向项目经理
    LLBL Gen Template Studio 2.x
    抛弃强大的TFS ,借助于BugTracker.NET + Visual Source Safe + SourceLink搭建项目开发环境
    Entity Framework 5中应用表值函数进行Linq查询
    SQL Server 2012 T-SQL 新特性
    当你还在纠结于ORM的性能时,我已经远远的把你抛在脑后
    直接修改.NET程序集 LLBL Gen 2.x-4.x 许可授权方法研究
    企业应用开发模式 ERP项目中应用到的技术和工具
    Enterprise Solution 应用程序开发框架培训
    架构:小议应用开发平台
  • 原文地址:https://www.cnblogs.com/yspworld/p/4079827.html
Copyright © 2011-2022 走看看