SDOTOJ2088 refresh的停车场(栈和队列)

refresh的停车场

Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld
& %llu

Submit Status

Description

refresh近期发了一笔横財,开了一家停车场。因为土地有限。停车场内停车数量有限,可是要求进停车场的车辆过多。当停车场满时,要进入的车辆会进入便道等待,最先进入便道的车辆会优先

进入停车场,并且停车场的结构要求仅仅出去的车辆必须是停车场中最后进去的车辆。

现告诉你停车场容量N以及命令数M,以及一些命令(Add num 表示车牌号为num的车辆要进入停车场或便道。

Del 表示停车场中出去了一辆车。Out 表示便道最前面的车辆不再等待。放弃进入停车场)。

如果便道内的车辆不超过1000000.

Input

首先输入N和M(0< n。m <200000),接下来输入M条命令。

Output

输入结束后,假设出现停车场内无车辆而出现Del或者便道内无车辆而出现Out,则输出Error,否则输出停车场内的车辆,最后进入的最先输出,无车辆不输出。

Sample Input

2 6
Add 18353364208
Add 18353365550
Add 18353365558
Add 18353365559
Del
Out

Sample Output

18353365558
18353364208

Hint

      非常easy的一道题。可是手残错了好几遍,实在不应该,故留下做个纪念,愿此错不再犯。。。

模拟栈和队列做法:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<string>
#include<stack>
#include<queue>

using namespace std;

string a[2000021],b[2000021];
int n,m;

int main()
{
    while(cin >> n >> m)
    {
        int flag = 0;
        string str,num;
        int h = 0,k1 = 0,k2 = 0;
        for(int i=0; i<m; i++)
        {
            cin >> str;
            if(str == "Add")
            {
                cin >> num;
                if(h<n)
                {
                    a[++h] = num;
                }
                else
                {
                    b[++k2] = num;
                }

            }
            else if(str == "Del")
            {
                if(h<=0)
                {
                    flag = 1;
                }
                else if(k2 > k1)
                {

                    a[h] = b[++k1];
                }
                else if(k2<=k1)
                {
                    h--;
                }

            }
            else if(str == "Out")
            {
                if(k2 <= k1)
                {
                    flag = 1;
                }
                else
                {
                    k1++;
                }

            }

        }
        if(h>0 && flag == 0)
        {
            while(h>0)
            {
                cout << a[h] << endl;
                h--;
            }
        }
        else if(flag == 1)
        {
            cout << "Error" << endl;
        }

    }
    return 0;
}

STL做法:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<string>
#include<stack>
#include<queue>

using namespace std;

int n,m;

int main()
{
    while(cin >> n >> m)
    {
        stack<string>a;
        queue<string>b;
        int flag = 0;
        string str,num;
        for(int i=0; i<m; i++)
        {
            cin >> str;
            if(str == "Add")
            {
                cin >> num;
                if(a.size() == n)
                {
                    b.push(num);
                }
                else
                {
                    a.push(num);
                }
            }
            else if(str == "Del")
            {

                if(a.empty())
                {
                    flag = 1;
                }
                else
                {
                    a.pop();
                    if(!b.empty())
                    {
                        a.push(b.front());
                        b.pop();
                    }
                }
            }
            else if(str == "Out")
            {

                if(b.empty())
                {
                    flag = 1;
                }
                else
                {
                    b.pop();
                }
            }
            // printf("h = %d    k1 = %d   k2 = %d\n",h,k1,k2);
        }

        if(flag == 1)
        {
            cout << "Error" << endl;
        }
        else
        {
            while(!a.empty())
            {
                cout << a.top() << endl;
                a.pop();
            }

        }
    }
    return 0;
}

时间: 2024-10-08 13:57:56

SDOTOJ2088 refresh的停车场(栈和队列)的相关文章

refresh的停车场(栈和队列的STL)

refresh的停车场 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 refresh最近发了一笔横财,开了一家停车场.由于土地有限,停车场内停车数量有限,但是要求进停车场的车辆过多.当停车场满时,要进入的车辆会进入便道等待,最先进入便道的车辆会优先 进入停车场,而且停车场的结构要求只出去的车辆必须是停车场中最后进去的车辆.现告诉你停车场容量N以及命令数M,以及一些命令(Add num 表示车牌号为num的车辆要进入停车场或便

SDOTOJ2088 refresh的停车场

refresh的停车场 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Status Description refresh最近发了一笔横财,开了一家停车场.由于土地有限,停车场内停车数量有限,但是要求进停车场的车辆过多.当停车场满时,要进入的车辆会进入便道等待,最先进入便道的车辆会优先 进入停车场,而且停车场的结构要求只出去的车辆必须是停车场中最后进去的车辆.现告诉你停车场容量N

SDUT-2088_数据结构实验之栈与队列十一:refresh的停车场

数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description refresh最近发了一笔横财,开了一家停车场.由于土地有限,停车场内停车数量有限,但是要求进停车场的车辆过多.当停车场满时,要进入的车辆会进入便道等待,最先进入便道的车辆会优先 进入停车场,而且停车场的结构要求只出去的车辆必须是停车场中最后进去的车辆.现告诉你停车场容量N以及命令数M,以及一些命令(Add num 表

数据结构10:栈和队列

数据结构栈(Stack)和队列(Queue)详解 本章讲解了两种特殊的线性表结构——栈和队列.读者要重点理解栈的“先进后出”原则和队列的“先进先出”原则,体会两种特殊的线性表结构的应用场景. 本章内容: 1. 栈(Stack)的概念和应用及C语言实现 2. 数据结构实践项目之进制转换器 3. 括号匹配算法及C语言实现 4. 队列(Queue):“先进先出”的数据结构 5. 数据结构实践项目之变态的停车场管理系统 6. 扑克牌游戏及C语言实现 原文地址:https://www.cnblogs.co

快速记忆数组栈和队列函数push()和shift()

在js中,对数组的操作是比较常见的,有时候,我们需要模拟栈和队列的特性才能实现需求,今天来给大家用通俗易懂.简洁明了的几行文字,来告诉大家栈和队列的几个函数,如何快速记住. 首先,概念还是要知道的: 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻

3-3-行编辑程序-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第3章  栈和队列 - 行编辑程序 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? SequenceStack.c        相关测试数据下载  链接? 无数据

用栈实现队列的效果

用两个栈实现队列的效果,可以入栈,出栈,判空等... 实现的栈基本功能 lstack.h #ifndef _LSTACK_H #define _LSTACK_H #include <stdexcept> using namespace std; // 基于链式表的堆栈 class Stack { public: // 构造过程中初始化为空堆栈 Stack (void) : m_top (NULL) {} // 析构过程中销毁剩余的节点 ~Stack (void) { for (Node* ne

javascript中的栈、队列。

                       javascript中的栈.队列 栈方法     栈是一种LIFO(后进先出)的数据结构,在js中实现只需用到2个函数 push()  接受参数并将其放置数组尾,并返回修改后的数组长度. pop()  移除数组尾的最后一项,并返回移除项的值. 事例: var colors = new Array();var count = colors.push("red","green"); count = colors.push(&

数据结构之栈和队列

数据结构学习继续向前推进,之前对线性表进行了学习,现在我们进入栈和队列的学习.同样我们先学习一些基本概念以及堆栈的ADT. 栈和队列是两种中重要的线性结构.从数据结构角度看,栈和队列也是线性表,只不过是受限的线性表.因此可以称为限定性数据结构.但从数据类型来看,他们是和线性表大不相同的两类重要的抽象数据类型. 栈:(stack)是限定仅在表尾进行相应插入和删除操作的线性表.因此,对栈来说,表尾有其特殊含义,称为栈顶,表头称为栈底,不含元素的空表称为空栈.栈一个重要特性就是后进先出.OK,我们来看