当前位置: 首页 > news >正文

L2-037 包装机 (分数25)(详解)

题目链接——L2-037 包装机

问题分析

这个题目就是模拟了物品在传送带和筐之间的传送过程。传送带用队列模拟,筐用栈模拟。

输入

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

输出

根据上述操作,输出的物品顺序是:

MATA

样例分析

初始状态:
  • 筐(栈):空
  • 行1G P L T
  • 行2P A T A
  • 行3O M S A
操作步骤:
  1. 3(取行3的O入筐)→ 筐:[O]
  2. 2(取行2的P入筐)→ 筐:[O, P]
  3. 3(取行3的M入筐)→ 筐:[O, P, M]
  4. 0(输出筐顶M)→ 输出:M,筐:[O, P]
  5. 1(取行1的G入筐)→ 筐:[O, P, G]
  6. 2(取行2的A入筐)→ 筐:[O, P, G, A]
  7. 0(输出筐顶A)→ 输出:A,筐:[O, P, G]
  8. 2(取行2的T入筐)→ 筐:[O, P, G, T]
  9. 2(取行2的A,但筐已满)→ 先输出筐顶T,再入A
    → 输出:T,筐:[O, P, G, A]
  10. 0(输出筐顶A)→ 输出:A,筐:[O, P, G]
最终输出:
  • 按顺序输出的字符:M A T AMATA

解题思路

  1. 数据结构选择

    • 使用队列数组 queue<char> q[n + 1] 存储每行传送带上的物品。
    • 使用栈 stack<char> stk 模拟筐的存储。
  2. 输入处理

    • 输入 nmmx,分别表示传送带行数、每行物品数和筐的最大容量。
    • 读取每行传送带的物品,依次存入对应的队列。
  3. 指令处理

    • 循环读取指令 id
      • 如果 id == -1,结束程序。
      • 如果 id == 0,从筐顶取物并输出(若筐不为空)。
      • 如果 id > 0,从第 id 行传送带取物放入筐(若筐满则先取筐顶物品输出)。
  4. 关键点

    • 注意筐的容量限制,满时需先取再放。
    • 注意传送带队列和筐的空状态,避免非法操作。

具体见代码

#include<bits/stdc++.h>
#define debug(x) cout<<endl<<"===>"<<#x<<"="<<x<<endl;
#define output(x) cout<<x<<endl;
#define int long long
using namespace std;

void solve() {
    int n, m, mx;//n行,一行m个物品,筐的最大容量
    cin >> n >> m >> mx;
    stack<char> stk;//模拟筐的栈
    queue<char> q[n + 1];//每一行就是一个队列(下标从1开始)
    for(int i = 1; i <= n; i++) {
        string s;//一行的物品
        cin >> s;
        for(char c : s) q[i].push(c);
    }
    int id;
    while(cin >> id) {
        if(id == -1) break;//-1即退出
        if(id == 0) {//输出框顶部
            if(stk.empty()) continue;//注意筐空
            //输出筐顶,出栈
            cout << stk.top();
            stk.pop();
        } else {
            if(q[id].empty()) continue;//注意队列空
            //将队列的东西放入筐之前,检查是否满了
            if(stk.size() == mx) {//如果满了,就取筐顶
                cout << stk.top();
                stk.pop();
            }
            //放筐中,出队列
            stk.push(q[id].front());
            q[id].pop();
        }
    }
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    //while(1)//个人习惯,方便调试
    solve();
    return 0;
}

相关文章:

  • 动态网站开发pdf爱站网备案查询
  • ps做网站画布多大长沙全网推广
  • 天津市做网站公司优化大师是什么软件
  • seo竞争对手网站分析搜索关键词优化排名
  • 做门窗的 在哪个网站跑业务跑业务石家庄
  • 网站文章不收录济南seo公司
  • DeepSeek协助优化-GTX750Ti文物显卡0.65秒卷完400MB float 音频512阶时域FIR
  • OTN(Optical Transport Network)详解
  • RK3588,V4l2 读取Gmsl相机, Rga yuv422转换rgb (dma), 实现零拷贝
  • 【Deep Reinforcement Learning Hands-On Third Edition】【序】
  • Python Django基于人脸识别的票务管理系统(附源码,文档说明)
  • 运算放大器(三)运算放大器的典型应用
  • Zoomlt使用
  • 解决:在运行 plt.show()`时,程序会等待你手动关闭图片窗口才能继续往下执行
  • 基于YOLO11/WVP的电梯系统开发-模型训练与rk3568移植
  • HarmonyOS NEXT——【鸿蒙实现录音识别(语音转文字)】
  • Node.js 技术原理分析系列 —— Node.js 调试能力分析
  • 正则化是什么?
  • Anolis OS 8.4修复CVE-1999-0554漏洞记录
  • 操作系统——线程的概念和特点
  • ssm框架之Spring
  • BIM/I-FGSM对抗样本生成算法实现(pytorch版)
  • Java-01-源码篇-JUC并发编程-常用类
  • 并查集基础模板(java实现)
  • 【力扣hot100题】(019)旋转图像
  • Kubernetes深度解析:云原生时代的容器编排引擎