数组模拟
#include<iostream>
using namespace std;
char e[110][1010];
char e1[1000001];
int main()
{
int n,m,maxn,i,j,k,l,x;
cin>>n>>m>>maxn;
for(i=1;i<=n;i++)
scanf("%s",&e[i]);
k=0;
while(scanf("%d",&x)!=EOF)
{
if(x==-1) return 0;
if(x>0)
{
if(e[x][0]<'A'||e[x][0]>'Z')
continue;
if(k>=maxn)
{
printf("%c",e1[k-1]);
e1[k-1]=e[x][0];
}
else
{
e1[k]=e[x][0];
k++;
}
for(i=0,j=1;j<=1000;i++,j++)
e[x][i]=e[x][j];
}
if(x==0)
{
if(k==0) continue;
printf("%c",e1[k-1]);
k--;
}
}
}
STL容器
#include<iostream>
#include<stack>
using namespace std;
const int N=105;
int main()
{
string str[N],res;
stack<char>s;
int n,m,k,x;
cin>>n>>m>>k;
for(int i=1;i<=n;i++) cin>>str[i];
while(cin>>x)
{
if(x==-1) break;
if(x==0)
{
if(s.empty()) continue;
else
{
res+=s.top();
s.pop();
continue;
}
}
if(str[x].empty()) continue;
if(s.size()==k)
{
res+=s.top();
s.pop();
s.push(str[x][0]);
str[x].erase(0,1);
}
else
{
s.push(str[x][0]);
str[x].erase(0,1);
}
}
cout<<res<<endl;
return 0;
}