题目大意:典型的堆栈。就是给你火车进站的顺序和出站顺序,进出站遵循先进后出原则,让你判断是否有可能按所给的出站顺序出站。可以的话输出进出站过程。
代码如下:
#include<cstdio>
#include<iostream>
#include<stack>
using namespace std;
stack<char>st;
int main(void)
{
char s1[100],s2[100];
int n,k,j,a[100];
while(~scanf("%d%s%s",&n,s1,s2))
{
while(!st.empty()) //记得每次的测试对栈进行清空
st.pop();
j=0;k=0;
for(int i=0;i<n;i++)
{
st.push(s1[i]);
a[k++]=1;
while(!st.empty()&&st.top()==s2[j]) //如果栈顶元素与出栈元素吻合了,就把标记数组a[i]记为0
{
a[k++]=0;
st.pop();
j++;
}
}
if(j==n)
{
printf("Yes.\n");
for(int i=0;i<k;i++)
{
if(a[i]==1)
printf("in\n");
else
printf("out\n");
}
}
else
printf("No.\n");
printf("FINISH\n");
}
return 0;
}