L2-1 包装机 题解

题目分析

这道题模拟了一个自动包装机的工作流程。包装机有N条轨道,每条轨道上有M个物品。筐的容量为S_max。我们需要根据输入的按钮操作序列,模拟物品从轨道到筐再到流水线的转移过程。

解题思路
  1. 数据结构选择

    • 用二维数组SS存储每条轨道上的物品

    • 用一维数组G模拟筐(栈结构)

    • 用数组C记录各轨道的当前物品位置和筐的当前容量

  2. 操作处理

    • 当按下轨道按钮时:

      • 如果筐已满,先执行0号操作(取出一个物品)

      • 然后将该轨道当前物品推入筐

    • 当按下0号按钮时:

      • 从筐顶取出一个物品放到流水线

  3. 边界条件

    • 轨道为空时不处理

    • 筐为空时不处理0号操作

    • 筐满时强制先执行0号操作

      #include<bits/stdc++.h>
      using namespace std;
      
      char SS[105][1005];  // 存储各轨道物品
      char G[105];         // 筐(栈)
      int C[105];          // C[0]记录筐顶位置,C[1..N]记录各轨道当前位置
      
      int main() {
          int n, m, s;
          cin >> n >> m >> s;
          
          // 读取各轨道初始物品
          for(int i = 1; i <= n; i++) {
              scanf("%s", SS[i]);
          }
          
          // 初始化各轨道当前位置
          for(int i = 1; i <= n; i++) {
              C[i] = 0;  // 指向每个轨道的第一个物品
          }
          C[0] = -1;     // 筐初始为空
          
          int op;
          while(cin >> op && op != -1) {
              if(op == 0) {  // 0号操作:从筐中取出
                  if(C[0] >= 0) {  // 筐不为空
                      cout << G[C[0]--];  // 输出筐顶物品
                  }
              } 
              else {  // 轨道操作
                  // 检查轨道是否为空
                  if(C[op] >= m) continue;
                  
                  // 检查筐是否已满
                  if(C[0] == s - 1) {
                      // 筐满,强制先执行0号操作
                      if(C[0] >= 0) {
                          cout << G[C[0]--];
                      }
                  }
                  
                  // 将物品推入筐
                  if(C[0] < s - 1) {
                      G[++C[0]] = SS[op][C[op]++];
                  }
              }
          }
          
          return 0;
      }
      代码解释
    • 输入处理

      • 读取轨道数n、每条轨道物品数m、筐容量s

      • 读取各轨道物品到二维数组SS中

    • 初始化

      • C数组初始化:C[0]表示筐顶位置(初始-1表示空),C[1..n]表示各轨道当前要处理的物品位置

    • 操作处理循环

      • 0号操作:筐不为空时,取出筐顶物品输出

      • 轨道操作:

        • 检查轨道是否为空

        • 筐满时强制先执行0号操作

        • 将当前轨道物品推入筐

    • 输出

      • 每次执行0号操作时直接输出筐顶物品

    • 注意事项
    • 数组大小要足够(题目给出N≤100,M≤1000)

    • 复杂度分析
    • 时间复杂度:O(K),K为操作序列长度

    • 空间复杂度:O(N*M + S),存储轨道物品和筐

    • 这个解法直接模拟了包装机的工作流程,思路清晰,能够正确处理各种边界情况。

    • 注意筐满时的强制操作处理

    • 边界条件要处理周全(轨道空、筐空等情况)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值