题目描述
某火车站只有一条铁轨供火车停靠,所有的列车都从一侧进入,从另一侧出来。如果此时,列车A首先进入铁路,然后列车B在列车A离开之前进入铁路,则列车A不能离开,直到列车B离开(如下图所示)。车站最多有9列火车,所有火车都有一个ID(编号从1到n),列车按照Order1的顺序进入铁路,你需要确定列车可以以Order2的顺序从地铁站离开。
输入
测试数据有多组
每组包含一个整数N和两个字符串O1,O2,N代表列车数量(1 <= N <= 9),O1代表进站顺序,O2代表出站顺序
输出
对于每组数据
首先输出一行"Yes."或"No.",代表能否由当进站顺序为O1时,出站顺序O2能否实现
若能实现,给出你的实现方法,其中"in"为列车进站,"out"为列车出站。
最后输出一行FINISH。
具体输出见样例。
样例输入
3 123 321 3 123 312
样例输出
Yes. in in in out out out FINISH No. FINISH
#include <iostream>
#include <stack>
#include <string>
using namespace std;
void test(int m)
{
int n=m;
string o1,o2;
stack<char> T;
cin>>o1>>o2;
char p;
string k;
int j=0;
for(int i=0;i<o1.length()&&j<o2.length();)
{
p=o1[i];
T.push(p);
i++;
k+="in\n";
while(!T.empty())
{
if(T.top()==o2[j])
{
T.pop();
k+="out\n";
j++;
}
else
break;
}
}
if(T.empty()||j==o2.length())
{
cout<<"Yes."<<endl;
cout<<k;
}
else
cout<<"No."<<endl;
}
int main()
{
int n;
while(cin>>n)
{
test(n);
cout<<"FINISH"<<endl;
}
return 0;
}