之前一直没AC 只得了20分 后来发现是自己的问题,感谢大佬的题解,当传送带上为空,此时虽然栈满,但是也不会弹出东西。就是,先后的问题写错了。 但是,自己当时就是发现不了,哎。 一方面是太着急,一方面是能力不够。 读题的时候,一定要小心,全面。 另外自己也没想到,传送带符合先进先出,后进后出的特点,可以用队列。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
using namespace std;
const int N = 110;
stack<char> s;
queue<char> q[N];
int n,m,s_max;
vector<char> res;
using namespace std;
void move(int i)
{
if(q[i].empty()) return;
if(s.size() == s_max)
{
char top = s.top();;
s.pop();
res.push_back(top);
}
s.push(q[i].front());
q[i].pop();
}
int main()
{
cin>>n>>m>>s_max;
for(int i=1;i<=n;i++)
{
char c;
for(int j=1;j<=m;j++)
{
cin>>c;
q[i].push(c);
}
}
int x;
while(cin>>x)
{
if(x == -1) break;
if(x != 0) move(x);
if(x == 0)
{
if(s.empty()) continue;
char top = s.top();
s.pop();
res.push_back(top);
}
}
for(int i=0;i<res.size();i++)
cout<<res[i];
}
人外有人,天外有天。 山高路远。看自己。
|