zoukankan      html  css  js  c++  java
  • SDUT OJ 2088 refresh的停车场

    refresh的停车场

    Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

    题目描述

     refresh最近发了一笔横财,开了一家停车场。由于土地有限,停车场内停车数量有限,但是要求进停车场的车辆过多。当停车场满时,要进入的车辆会进入便道等待,最先进入便道的车辆会优先
    进入停车场,而且停车场的结构要求只出去的车辆必须是停车场中最后进去的车辆。现告诉你停车场容量N以及命令数M,以及一些命令(Add num 表示车牌号为num的车辆要进入停车场或便道,
    Del 表示停车场中出去了一辆车,Out 表示便道最前面的车辆不再等待,放弃进入停车场)。假设便道内的车辆不超过1000000.

    输入

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

    输出

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

    示例输入

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

    示例输出

    18353365558
    18353364208

    算法分析:使用STL的栈和队列 来做的,比较好描述。
    用栈来模拟停车场,后进先出。 用队列来模拟候车的便道,先来先进停车场。
    注意:即使 中间的输入处理命令不合理,需要输出Error 那也得把所有的命令输入完毕之后在输出Error,也就是说
    一旦出现不合理的情况,则需要标记。
    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    #include <string>
    #include <algorithm>
    #include <stack>
    #include <queue>
    
    using namespace std;
    int n, m;
    char s[50]; string t;
    int main()
    {
        int dd, i;
        int flag;
        while(scanf("%d %d", &n, &m)!=EOF)
        {
            stack<string>q;
            queue<string>w;
            flag=1;
            for(i=0; i<m; i++)
            {
                cin>>s;
                if(s[0]=='A' )
                {
                    cin>>t;
                    if(q.size()==n)
                    {
                         w.push(t); //进入队列
                    }
                    else
                    {
                       q.push(t);
                    }
                }
                else if(s[0]=='D')
                {
                    if(q.empty())
                    {
                        flag=0;
                    }
                    else
                    {
                        q.pop();
                        if(!w.empty())
                        {
                            t=w.front();
                            q.push(t);
                            w.pop();
                        }
                    }
                }
                else
                {
                    if(w.empty())
                    {
                        flag=0;
                    }
                    else
                    {
                       w.pop();
                    }
                }
            }
            if(flag==0)
              printf("Error
    ");
            else
            {
                while(!q.empty())
                {
                   t=q.top();
                   cout<<t<<endl;
                   q.pop();
                 }
            }
        }
        return 0;
    }
    
  • 相关阅读:
    [Java基础] 深入jar包:从jar包中读取资源文件
    [Git] git merge和rebase的区别
    windows和linux中换行符的转换
    使用 scikit-learn 实现多类别及多标签分类算法
    python 特征缺失值填充
    多输出回归问题
    python DataFrame获取行数、列数、索引及第几行第几列的值
    Xgboost 模型保存和载入()
    pandas所占内存释放
    SSE,MSE,RMSE,R-square 指标讲解
  • 原文地址:https://www.cnblogs.com/yspworld/p/4049145.html
Copyright © 2011-2022 走看看