题面
思路
按照题意模拟:
- 筐里的物品总是先进后出, 可以看做栈
- 而轨道的物品总是从左到右掉入筐中, 可以用数组模拟, 我们需要记录每一条轨道, 最左的物品. 这个可以用now数组表示, now[i]表示第i个轨道的最左物品, 原i轨道的下标
实现
#include <stack>
#include <iostream>
using namespace std;
const int N = 105, M = 1005;
int now[N], n, m, s;
char way[N][M];
int main()
{
cin >> n >> m >> s;
for(int i = 1; i <= n; i ++) cin >> way[i];
int t;
stack<char> sta;
while(cin >> t, t != -1)
{
if(t == 0)
{
if(sta.size())
{
cout << sta.top();
sta.pop();
}
continue;
}
int &j = now[t];
if(j < m)
{
if(sta.size() == s)
{
cout << sta.top();
sta.pop();
}
sta.push(way[t][j++]);
}
}
return 0;
}