思路:
火车出栈的序列是“部分”倒序的,可以通过出栈的序列来对应模拟所有火车的进站——出栈次序。
注意到一个规律:若火车x已经进站,那么火车1~x-1一定在其之前已经进站。
关键在于用栈的思想处理入栈序列。
注意标志数组的使用,容器在每次循环中一定要先清空。
#include<iostream>
#include<string.h>
#include<stack>
using namespace std;
int main()
{
int n,i,j,p;
int flg[50];
stack<char> s;
while(cin>>n)
{
p = 0;
char str1[20],str2[20];
memset(flg,0,sizeof(flg));
while(!s.empty())s.pop();
cin>>str1>>str2;
for(i=0,j=0;i<n;i++)
{
s.push(str1[i]);
flg[p]=1;p++;
while(!s.empty()&&s.top() == str2[j])
{
s.pop();
j++;
flg[p]=0;p++;
}
}
if(s.empty())
{
cout<<"Yes."<<endl;
for(int i = 0; i < p;i++)
if(flg[i])cout<<"in"<<endl;
else cout<<"out"<<endl;
}
else if(!s.empty())
cout<<"No."<<endl;
cout<<"FINISH"<<endl;
}
}