L2-037 包装机 (25 分)(队列加栈模拟)

简介: L2-037 包装机 (25 分)(队列加栈模拟)

一种自动包装机的结构如图 1 所示。首先机器中有 N 条轨道,放置了一些物品。轨道下面有一个筐。当某条轨道的按钮被按下时,活塞向左推动,将轨道尽头的一件物品推落筐中。当 0 号按钮被按下时,机械手将抓取筐顶部的一件物品,放到流水线上。图 2 显示了顺序按下按钮 3、2、3、0、1、2、0 后包装机的状态。

9cfb907bb13b264699be4948f3ebe117.jpg


图1 自动包装机的结构

d351d395e80af565c4d286d556ae18ef.jpg


图 2 顺序按下按钮 3、2、3、0、1、2、0 后包装机的状态


一种特殊情况是,因为筐的容量是有限的,当筐已经满了,但仍然有某条轨道的按钮被按下时,系统应强制启动 0 号键,先从筐里抓出一件物品,再将对应轨道的物品推落。此外,如果轨道已经空了,再按对应的按钮不会发生任何事;同样的,如果筐是空的,按 0 号按钮也不会发生任何事。


现给定一系列按钮操作,请你依次列出流水线上的物品。


输入格式:

输入第一行给出 3 个正整数 N(≤100)、M(≤1000)和 Smax(≤100),分别为轨道的条数(于是轨道从 1 到 N 编号)、每条轨道初始放置的物品数量、以及筐的最大容量。随后 N 行,每行给出 M 个英文大写字母,表示每条轨道的初始物品摆放。


最后一行给出一系列数字,顺序对应被按下的按钮编号,直到 −1 标志输入结束,这个数字不要处理。数字间以空格分隔。题目保证至少会取出一件物品放在流水线上。


输出格式:

在一行中顺序输出流水线上的物品,不得有任何空格。


输入样例:

1. 3 4 4
2. GPLT
3. PATA
4. OMSA
5. 3 2 3 0 1 2 0 2 2 0 -1


输出样例:

MATA


思路:根据题意用栈和队列模拟一遍实现过程

#include<iostream>
#include<queue>
#include<stack>
using namespace std;
const int N=1010;
queue<char>q[N];
stack<char>st;
int main()
{
    int n,m,k;
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
    {
        string s;
        cin>>s;
        for(int j=0;j<m;j++)
        {
            q[i].push(s[j]);
        }
    }
    int x;
    while(cin>>x&&x!=-1)
    {
        if(x==0)//机械手将抓取筐顶部的一件物品
        {
            if(st.size())
            {
                cout<<st.top();
                st.pop();
            }
        }
        else
        {
            if(q[x].size())
            {
                if(st.size()==k)//强制启动0号键,先从筐里抓出一件物品
                {
                    cout<<st.top();
                    st.pop();
                }
                st.push(q[x].front());
                q[x].pop();
            }
        }
    }
    return 0;
}


目录
相关文章
|
6天前
|
算法 安全 测试技术
golang 栈数据结构的实现和应用
本文详细介绍了“栈”这一数据结构的特点,并用Golang实现栈。栈是一种FILO(First In Last Out,即先进后出或后进先出)的数据结构。文章展示了如何用slice和链表来实现栈,并通过golang benchmark测试了二者的性能差异。此外,还提供了几个使用栈结构解决的实际算法问题示例,如有效的括号匹配等。
golang 栈数据结构的实现和应用
01_设计一个有getMin功能的栈
01_设计一个有getMin功能的栈
|
6天前
|
前端开发
07_用队列实现栈
07_用队列实现栈
06_用栈来求解汉诺塔问题
06_用栈来求解汉诺塔问题
05_用一个栈实现另一个栈的排序
05_用一个栈实现另一个栈的排序
03_如何仅用递归函数和栈操作逆序一个栈
03_如何仅用递归函数和栈操作逆序一个栈
|
6天前
|
测试技术
02_由两个栈组成的队列
02_由两个栈组成的队列
|
9天前
|
存储
|
7天前
|
安全 JavaScript 前端开发
栈溢出漏洞传播Worm.Delf.yqz
栈溢出漏洞传播Worm.Delf.yqz
|
24天前
|
存储 人工智能 C语言
数据结构基础详解(C语言): 栈的括号匹配(实战)与栈的表达式求值&&特殊矩阵的压缩存储
本文首先介绍了栈的应用之一——括号匹配,利用栈的特性实现左右括号的匹配检测。接着详细描述了南京理工大学的一道编程题,要求判断输入字符串中的括号是否正确匹配,并给出了完整的代码示例。此外,还探讨了栈在表达式求值中的应用,包括中缀、后缀和前缀表达式的转换与计算方法。最后,文章介绍了矩阵的压缩存储技术,涵盖对称矩阵、三角矩阵及稀疏矩阵的不同压缩存储策略,提高存储效率。