题目描述
某火车站只有一条铁轨供火车停靠,所有的列车都从一侧进入,从另一侧出来。如果此时,列车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>
using namespace std;
int main(){
int n;
string in, out;
while(cin>>n>>in>>out){
stack<char> st;
string str= "";
int out1= 0;
int in1= 0;
for(int i= 0; i< n*2; i++){
if(!st.empty()&&st.top()== out[out1]){
//cout<<st.top()<<endl;
st.pop();
out1++;
str+= "out";
}
else if(in1< n){
st.push(in[in1++]);
str += "in";
}
}
//cout<<str<<endl;
if(st.empty()){
cout<<"Yes."<<endl;
int len= str.length();
for(int i= 0; i< len;){
if(str[i]== 'i'){
cout<<"in"<<endl;
i+= 2;
}
if(str[i]== 'o'){
cout<<"out"<<endl;
i+= 3;
}
}
}
else
cout<<"No."<<endl;
cout<<"FINISH"<<endl;
}
return 0;
}