L2-037 包装机 - 团体程序设计天梯赛-练习集 (pintia.cn)
非常友好的一道模拟题。没有弯弯绕绕,没有坑蒙拐骗,全是人情世故QAQ。
本题我使用的是string进行操作,会涉及到erase操作,其实如果使用queue也许耗时更短。
需要注意的坑:当容器(vec)或者生产线(lines)中的数据为空的时候,相应的取出和放入操作都不会执行。还有就是要注意判断的位置,如果当前放入,但是源头没有货了,而且容器又是满的,这时候就不要把容器里的东西拿出来了,直接不操作即可。
AC代码:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int n, m, s; //链条数 单链条物品数 容器最大容量
int main()
{
cin >> n >> m >> s;
getchar();
vector<string>lines(n+1);
string vec; //容器
string ans; //流水线
for (int i = 1; i <= n; i++)
getline(cin, lines[i]);
//输入指令
int op; //指令
while (1)
{
cin >> op;
if (op == -1) break;
else if (op == 0) //取出
{
if (vec.empty()) continue; //如果为空,那就不操作
ans += vec.back(); //将容器中最后一个取出,添加到流水线中
vec.pop_back(); //弹出
}
else //一般放入操作
{
if (lines[op].empty()) continue; //如果为空,那就不操作
if (vec.size() == s) //当前已经满了
{
ans += vec.back(); //将容器中最后一个取出,添加到流水线中
vec.pop_back();
}
//放入操作
vec.push_back(lines[op].front()); //放入首项
lines[op].erase(0, 1); //删除第一项
}
}
cout << ans;
return 0;
}