陆陆平时除了打王者荣耀之外,还喜欢去打弹珠。由于陆陆实在是太喜欢打弹珠了,因此她在家里珍藏了n把弹珠枪,每一把弹珠枪都能装m个弹珠。
这天,由于太久没有打弹珠了,再加上之前在王者荣耀战队赛中输给了老对手乐乐,陆陆今天非常想发泄一下情绪,去弹珠场射个痛快。在开始射击之前,陆陆又重新温习了一遍规则:
① 弹珠场上有一个弹珠夹,陆陆每次射击时需要将弹珠射入弹珠夹的底部,不过既然陆陆是一个神枪手,那么我们认为能够百发百中,不会出现射偏的情况。弹珠夹的最大容量为s。
② 在射击台上有一个电子屏,上面显示着每一轮射击游戏的要求。当电子屏显示0时,弹珠夹会将最上面的弹珠弹出,这时陆陆需要记录这颗射出的弹珠种类;当电子屏显示i时,陆陆需要使用第i把枪将其中的第一个弹珠射入弹珠夹中。当电子屏显示-1时,游戏结束。
③ 弹珠的种类用大写字母表示。
此外,还需要注意以下三点:
-
如果电子屏显示0,但是弹珠夹中没有弹珠时,不会弹出任何弹珠,陆陆也不需要做记录
-
如果电子屏显示i,但第把枪中没有弹珠时,陆陆不需要射击。
-
如果电子票显示i,但弹珠夹已经达到最大容量,弹珠夹会弹出最上面的弹珠,乐乐同样需要记录弹珠的种类。
请问,一轮比赛结束后,陆陆需要在纸上记录哪些内容?
输入格式:
第一行三个正整数,n, m, s,含义见题目,n, m <= 100, s <= 1000。
接下来n行,每行m个字母,表示弹珠枪开始装的弹珠。
接下来若干行,每行一个正整数,表示这轮游戏的操作要求。
输出格式:
输出一行,表示陆陆记录的所有弹珠的种类。
限制:
空间限制:128MByte
时间限制:1秒
样例:
输入:
3 2 3
A B
C D
E F
1
3
0
2
1
0
1
0
3
2
-1
输出:
EBC
模拟,代码如下:
#include<iostream>
#include<queue>
#include<stack>
using namespace std;
const int N=1e5;
stack<char> s;
queue<char> q[N+100];
int n,m,a,k,u=0;
char l,d[N+100];
int main(){
cin>>n>>m>>k;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>l;
q[i].push(l);
}
}
while(cin>>a){
if(a==-1){
break;
}
if(a){
if(s.size()!=k&&!q[a-1].empty()){
s.push(q[a-1].front());
q[a-1].pop();
}
else if(s.size()==k&&!q[a-1].empty()){
d[u++]=s.top();
s.pop();
s.push(q[a-1].front());
q[a-1].pop();
}
continue;
}
else if(!a){
if(s.size()){
d[u++]=s.top();
s.pop();
}
continue;
}
}
for(int i=0;i<u;i++){
cout<<d[i];
}
return 0;
}